backend-compatibility.jsonl 4.9 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284
  1. {"Time":"2026-09-12T11:38:26.9418399+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/service"}
  2. {"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"}
  3. {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI"}
  4. {"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"}
  5. {"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"}
  6. {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Elapsed":0}
  7. {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic"}
  8. {"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"}
  9. {"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"}
  10. {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Elapsed":0}
  11. {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo"}
  12. {"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"}
  13. {"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"}
  14. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Elapsed":0}
  15. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled"}
  16. {"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"}
  17. {"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"}
  18. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Elapsed":0}
  19. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade"}
  20. {"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"}
  21. {"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"}
  22. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Elapsed":0}
  23. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot"}
  24. {"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"}
  25. {"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"}
  26. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Elapsed":0}
  27. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed"}
  28. {"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"}
  29. {"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"}
  30. {"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"}
  31. {"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"}
  32. {"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}
  33. {"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"}
  34. {"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"}
  35. {"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"}
  36. {"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}
  37. {"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"}
  38. {"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"}
  39. {"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"}
  40. {"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}
  41. {"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"}
  42. {"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"}
  43. {"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"}
  44. {"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}
  45. {"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"}
  46. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Elapsed":0}
  47. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed"}
  48. {"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"}
  49. {"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"}
  50. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Elapsed":0}
  51. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed"}
  52. {"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"}
  53. {"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"}
  54. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Elapsed":0}
  55. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle"}
  56. {"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"}
  57. {"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"}
  58. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Elapsed":0}
  59. {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads"}
  60. {"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"}
  61. {"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"}
  62. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Elapsed":0}
  63. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift"}
  64. {"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"}
  65. {"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"}
  66. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Elapsed":0}
  67. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade"}
  68. {"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"}
  69. {"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"}
  70. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Elapsed":0}
  71. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer"}
  72. {"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"}
  73. {"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"}
  74. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Elapsed":0}
  75. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy"}
  76. {"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"}
  77. {"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"}
  78. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Elapsed":0}
  79. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback"}
  80. {"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"}
  81. {"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"}
  82. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Elapsed":0}
  83. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting"}
  84. {"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"}
  85. {"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"}
  86. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Elapsed":0}
  87. {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget"}
  88. {"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"}
  89. {"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"}
  90. {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Elapsed":0}
  91. {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough"}
  92. {"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"}
  93. {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false"}
  94. {"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"}
  95. {"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"}
  96. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Elapsed":0}
  97. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true"}
  98. {"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"}
  99. {"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"}
  100. {"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"}
  101. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Elapsed":0}
  102. {"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"}
  103. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Elapsed":0}
  104. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity"}
  105. {"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"}
  106. {"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"}
  107. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Elapsed":0}
  108. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored"}
  109. {"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"}
  110. {"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"}
  111. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Elapsed":0}
  112. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled"}
  113. {"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"}
  114. {"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"}
  115. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Elapsed":0}
  116. {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3"}
  117. {"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"}
  118. {"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"}
  119. {"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"}
  120. {"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"}
  121. {"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}
  122. {"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"}
  123. {"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"}
  124. {"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"}
  125. {"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}
  126. {"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"}
  127. {"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"}
  128. {"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"}
  129. {"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"}
  130. {"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"}
  131. {"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}
  132. {"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"}
  133. {"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"}
  134. {"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"}
  135. {"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}
  136. {"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"}
  137. {"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"}
  138. {"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"}
  139. {"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}
  140. {"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"}
  141. {"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"}
  142. {"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"}
  143. {"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"}
  144. {"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}
  145. {"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"}
  146. {"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"}
  147. {"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"}
  148. {"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"}
  149. {"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}
  150. {"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"}
  151. {"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"}
  152. {"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"}
  153. {"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"}
  154. {"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}
  155. {"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"}
  156. {"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"}
  157. {"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"}
  158. {"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"}
  159. {"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}
  160. {"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"}
  161. {"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"}
  162. {"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"}
  163. {"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"}
  164. {"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}
  165. {"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"}
  166. {"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"}
  167. {"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"}
  168. {"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}
  169. {"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"}
  170. {"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"}
  171. {"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"}
  172. {"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}
  173. {"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"}
  174. {"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"}
  175. {"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"}
  176. {"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"}
  177. {"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"}
  178. {"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}
  179. {"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"}
  180. {"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"}
  181. {"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"}
  182. {"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}
  183. {"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"}
  184. {"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"}
  185. {"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"}
  186. {"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}
  187. {"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"}
  188. {"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"}
  189. {"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"}
  190. {"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"}
  191. {"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}
  192. {"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"}
  193. {"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"}
  194. {"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"}
  195. {"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"}
  196. {"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}
  197. {"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"}
  198. {"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"}
  199. {"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"}
  200. {"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"}
  201. {"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}
  202. {"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"}
  203. {"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"}
  204. {"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"}
  205. {"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"}
  206. {"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}
  207. {"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"}
  208. {"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"}
  209. {"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"}
  210. {"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"}
  211. {"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}
  212. {"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"}
  213. {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Elapsed":0.02}
  214. {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode"}
  215. {"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"}
  216. {"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"}
  217. {"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"}
  218. {"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"}
  219. {"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}
  220. {"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"}
  221. {"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"}
  222. {"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"}
  223. {"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}
  224. {"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"}
  225. {"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"}
  226. {"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"}
  227. {"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}
  228. {"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"}
  229. {"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"}
  230. {"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"}
  231. {"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}
  232. {"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"}
  233. {"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"}
  234. {"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"}
  235. {"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}
  236. {"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"}
  237. {"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"}
  238. {"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"}
  239. {"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}
  240. {"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"}
  241. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Elapsed":0}
  242. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown"}
  243. {"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"}
  244. {"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"}
  245. {"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"}
  246. {"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"}
  247. {"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}
  248. {"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"}
  249. {"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"}
  250. {"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"}
  251. {"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}
  252. {"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"}
  253. {"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"}
  254. {"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"}
  255. {"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}
  256. {"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"}
  257. {"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"}
  258. {"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"}
  259. {"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}
  260. {"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"}
  261. {"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"}
  262. {"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"}
  263. {"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}
  264. {"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"}
  265. {"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"}
  266. {"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"}
  267. {"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}
  268. {"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"}
  269. {"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"}
  270. {"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"}
  271. {"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}
  272. {"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"}
  273. {"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"}
  274. {"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"}
  275. {"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}
  276. {"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"}
  277. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Elapsed":0}
  278. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact"}
  279. {"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"}
  280. {"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"}
  281. {"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"}
  282. {"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"}
  283. {"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}
  284. {"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"}
  285. {"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"}
  286. {"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"}
  287. {"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}
  288. {"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"}
  289. {"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"}
  290. {"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"}
  291. {"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}
  292. {"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"}
  293. {"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"}
  294. {"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"}
  295. {"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}
  296. {"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"}
  297. {"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"}
  298. {"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"}
  299. {"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}
  300. {"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"}
  301. {"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"}
  302. {"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"}
  303. {"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}
  304. {"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"}
  305. {"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"}
  306. {"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"}
  307. {"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}
  308. {"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"}
  309. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Elapsed":0}
  310. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled"}
  311. {"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"}
  312. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启"}
  313. {"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"}
  314. {"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"}
  315. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Elapsed":0}
  316. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段"}
  317. {"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"}
  318. {"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"}
  319. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Elapsed":0}
  320. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭"}
  321. {"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"}
  322. {"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"}
  323. {"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}
  324. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭"}
  325. {"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"}
  326. {"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"}
  327. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Elapsed":0}
  328. {"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"}
  329. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Elapsed":0}
  330. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled"}
  331. {"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"}
  332. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启"}
  333. {"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"}
  334. {"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"}
  335. {"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}
  336. {"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"}
  337. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Elapsed":0}
  338. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled"}
  339. {"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"}
  340. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启"}
  341. {"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"}
  342. {"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"}
  343. {"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}
  344. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭"}
  345. {"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"}
  346. {"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"}
  347. {"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}
  348. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭"}
  349. {"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"}
  350. {"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"}
  351. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Elapsed":0}
  352. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭"}
  353. {"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"}
  354. {"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"}
  355. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Elapsed":0}
  356. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭"}
  357. {"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"}
  358. {"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"}
  359. {"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}
  360. {"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"}
  361. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Elapsed":0}
  362. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled"}
  363. {"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"}
  364. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关"}
  365. {"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"}
  366. {"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"}
  367. {"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}
  368. {"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专用开关"}
  369. {"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"}
  370. {"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"}
  371. {"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}
  372. {"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专用开关"}
  373. {"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"}
  374. {"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"}
  375. {"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}
  376. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键"}
  377. {"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"}
  378. {"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"}
  379. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Elapsed":0}
  380. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键"}
  381. {"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"}
  382. {"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"}
  383. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Elapsed":0}
  384. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭"}
  385. {"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"}
  386. {"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"}
  387. {"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}
  388. {"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"}
  389. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Elapsed":0}
  390. {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode"}
  391. {"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"}
  392. {"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"}
  393. {"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"}
  394. {"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"}
  395. {"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}
  396. {"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"}
  397. {"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"}
  398. {"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"}
  399. {"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}
  400. {"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"}
  401. {"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"}
  402. {"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"}
  403. {"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}
  404. {"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"}
  405. {"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"}
  406. {"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"}
  407. {"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}
  408. {"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"}
  409. {"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"}
  410. {"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"}
  411. {"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}
  412. {"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"}
  413. {"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"}
  414. {"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"}
  415. {"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}
  416. {"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"}
  417. {"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"}
  418. {"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"}
  419. {"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}
  420. {"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"}
  421. {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Elapsed":0}
  422. {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags"}
  423. {"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"}
  424. {"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"}
  425. {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Elapsed":0}
  426. {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot"}
  427. {"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"}
  428. {"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"}
  429. {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Elapsed":0}
  430. {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields"}
  431. {"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"}
  432. {"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"}
  433. {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Elapsed":0}
  434. {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields"}
  435. {"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"}
  436. {"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"}
  437. {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Elapsed":0}
  438. {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog"}
  439. {"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"}
  440. {"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"}
  441. {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Elapsed":0}
  442. {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist"}
  443. {"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"}
  444. {"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"}
  445. {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Elapsed":0}
  446. {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport"}
  447. {"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"}
  448. {"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"}
  449. {"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}
  450. {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported"}
  451. {"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"}
  452. {"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"}
  453. {"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"}
  454. {"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}
  455. {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath"}
  456. {"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"}
  457. {"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"}
  458. {"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}
  459. {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath"}
  460. {"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"}
  461. {"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"}
  462. {"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}
  463. {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported"}
  464. {"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"}
  465. {"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"}
  466. {"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"}
  467. {"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}
  468. {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic"}
  469. {"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"}
  470. {"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"}
  471. {"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}
  472. {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback"}
  473. {"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"}
  474. {"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"}
  475. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Elapsed":0}
  476. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL"}
  477. {"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"}
  478. {"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"}
  479. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Elapsed":0}
  480. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError"}
  481. {"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"}
  482. {"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"}
  483. {"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"}
  484. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Elapsed":0}
  485. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"}
  486. {"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"}
  487. {"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"}
  488. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"}
  489. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
  490. {"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"}
  491. {"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"}
  492. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
  493. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
  494. {"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"}
  495. {"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"}
  496. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
  497. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
  498. {"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"}
  499. {"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"}
  500. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
  501. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
  502. {"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"}
  503. {"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"}
  504. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
  505. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
  506. {"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"}
  507. {"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"}
  508. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
  509. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
  510. {"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"}
  511. {"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"}
  512. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
  513. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer"}
  514. {"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"}
  515. {"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"}
  516. {"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}
  517. {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip"}
  518. {"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"}
  519. {"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"}
  520. {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Elapsed":0}
  521. {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip"}
  522. {"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"}
  523. {"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"}
  524. {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Elapsed":0}
  525. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit"}
  526. {"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"}
  527. {"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"}
  528. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Elapsed":0}
  529. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser"}
  530. {"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"}
  531. {"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"}
  532. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Elapsed":0}
  533. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage"}
  534. {"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"}
  535. {"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"}
  536. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Elapsed":0}
  537. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages"}
  538. {"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"}
  539. {"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"}
  540. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Elapsed":0}
  541. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage"}
  542. {"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"}
  543. {"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"}
  544. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Elapsed":0}
  545. {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload"}
  546. {"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"}
  547. {"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"}
  548. {"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"}
  549. {"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"}
  550. {"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"}
  551. {"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}
  552. {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput"}
  553. {"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"}
  554. {"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"}
  555. {"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"}
  556. {"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"}
  557. {"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"}
  558. {"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}
  559. {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault"}
  560. {"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"}
  561. {"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"}
  562. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Elapsed":0}
  563. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover"}
  564. {"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"}
  565. {"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"}
  566. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Elapsed":0}
  567. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422"}
  568. {"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"}
  569. {"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"}
  570. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Elapsed":0}
  571. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted"}
  572. {"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"}
  573. {"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"}
  574. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Elapsed":0}
  575. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback"}
  576. {"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"}
  577. {"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"}
  578. {"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"}
  579. {"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"}
  580. {"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}
  581. {"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"}
  582. {"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"}
  583. {"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"}
  584. {"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}
  585. {"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"}
  586. {"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"}
  587. {"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"}
  588. {"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}
  589. {"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"}
  590. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Elapsed":0}
  591. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough"}
  592. {"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"}
  593. {"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"}
  594. {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Elapsed":0}
  595. {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE"}
  596. {"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"}
  597. {"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"}
  598. {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Elapsed":0}
  599. {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"}
  600. {"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"}
  601. {"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"}
  602. {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"}
  603. {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI"}
  604. {"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"}
  605. {"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"}
  606. {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Elapsed":0}
  607. {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations"}
  608. {"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"}
  609. {"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"}
  610. {"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"}
  611. {"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"}
  612. {"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}
  613. {"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"}
  614. {"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"}
  615. {"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"}
  616. {"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}
  617. {"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"}
  618. {"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"}
  619. {"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"}
  620. {"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}
  621. {"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"}
  622. {"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"}
  623. {"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"}
  624. {"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}
  625. {"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"}
  626. {"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"}
  627. {"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"}
  628. {"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}
  629. {"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"}
  630. {"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"}
  631. {"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"}
  632. {"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}
  633. {"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"}
  634. {"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"}
  635. {"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"}
  636. {"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}
  637. {"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"}
  638. {"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"}
  639. {"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"}
  640. {"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}
  641. {"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"}
  642. {"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"}
  643. {"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"}
  644. {"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}
  645. {"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"}
  646. {"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"}
  647. {"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"}
  648. {"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}
  649. {"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"}
  650. {"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"}
  651. {"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"}
  652. {"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}
  653. {"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"}
  654. {"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"}
  655. {"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"}
  656. {"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}
  657. {"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"}
  658. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Elapsed":0}
  659. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel"}
  660. {"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"}
  661. {"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"}
  662. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Elapsed":0}
  663. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins"}
  664. {"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"}
  665. {"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"}
  666. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Elapsed":0}
  667. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput"}
  668. {"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"}
  669. {"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"}
  670. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Elapsed":0}
  671. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes"}
  672. {"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"}
  673. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape"}
  674. {"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"}
  675. {"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"}
  676. {"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}
  677. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape"}
  678. {"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"}
  679. {"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"}
  680. {"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}
  681. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k"}
  682. {"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"}
  683. {"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"}
  684. {"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}
  685. {"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"}
  686. {"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"}
  687. {"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"}
  688. {"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}
  689. {"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"}
  690. {"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"}
  691. {"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"}
  692. {"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}
  693. {"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"}
  694. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Elapsed":0}
  695. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes"}
  696. {"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"}
  697. {"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"}
  698. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Elapsed":0}
  699. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages"}
  700. {"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"}
  701. {"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"}
  702. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Elapsed":0}
  703. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes"}
  704. {"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"}
  705. {"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"}
  706. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Elapsed":0}
  707. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload"}
  708. {"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"}
  709. {"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"}
  710. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Elapsed":0}
  711. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload"}
  712. {"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"}
  713. {"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"}
  714. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Elapsed":0}
  715. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody"}
  716. {"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"}
  717. {"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"}
  718. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Elapsed":0}
  719. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes"}
  720. {"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"}
  721. {"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"}
  722. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Elapsed":0}
  723. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData"}
  724. {"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"}
  725. {"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"}
  726. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Elapsed":0}
  727. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody"}
  728. {"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"}
  729. {"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"}
  730. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Elapsed":0}
  731. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage"}
  732. {"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"}
  733. {"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"}
  734. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Elapsed":0}
  735. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse"}
  736. {"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"}
  737. {"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"}
  738. {"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}
  739. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly"}
  740. {"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"}
  741. {"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"}
  742. {"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}
  743. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive"}
  744. {"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"}
  745. {"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"}
  746. {"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}
  747. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive"}
  748. {"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"}
  749. {"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"}
  750. {"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}
  751. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion"}
  752. {"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"}
  753. {"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"}
  754. {"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}
  755. {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources"}
  756. {"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"}
  757. {"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"}
  758. {"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"}
  759. {"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"}
  760. {"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"}
  761. {"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}
  762. {"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"}
  763. {"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"}
  764. {"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"}
  765. {"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"}
  766. {"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}
  767. {"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"}
  768. {"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"}
  769. {"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"}
  770. {"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"}
  771. {"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}
  772. {"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"}
  773. {"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"}
  774. {"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"}
  775. {"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"}
  776. {"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}
  777. {"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"}
  778. {"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"}
  779. {"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"}
  780. {"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"}
  781. {"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}
  782. {"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"}
  783. {"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"}
  784. {"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"}
  785. {"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"}
  786. {"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}
  787. {"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"}
  788. {"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}
  789. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported"}
  790. {"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"}
  791. {"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"}
  792. {"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"}
  793. {"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"}
  794. {"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"}
  795. {"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}
  796. {"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)"}
  797. {"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"}
  798. {"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"}
  799. {"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"}
  800. {"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}
  801. {"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"}
  802. {"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}
  803. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling"}
  804. {"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"}
  805. {"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"}
  806. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Elapsed":0}
  807. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets"}
  808. {"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"}
  809. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM"}
  810. {"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"}
  811. {"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"}
  812. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Elapsed":0}
  813. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek"}
  814. {"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"}
  815. {"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"}
  816. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Elapsed":0}
  817. {"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"}
  818. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Elapsed":0}
  819. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError"}
  820. {"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"}
  821. {"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"}
  822. {"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"}
  823. {"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"}
  824. {"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}
  825. {"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"}
  826. {"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"}
  827. {"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"}
  828. {"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}
  829. {"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"}
  830. {"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"}
  831. {"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"}
  832. {"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}
  833. {"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"}
  834. {"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"}
  835. {"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"}
  836. {"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}
  837. {"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"}
  838. {"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"}
  839. {"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"}
  840. {"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}
  841. {"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"}
  842. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Elapsed":0}
  843. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400"}
  844. {"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"}
  845. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code"}
  846. {"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"}
  847. {"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"}
  848. {"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}
  849. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider"}
  850. {"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"}
  851. {"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"}
  852. {"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}
  853. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found"}
  854. {"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"}
  855. {"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"}
  856. {"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}
  857. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported"}
  858. {"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"}
  859. {"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"}
  860. {"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}
  861. {"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"}
  862. {"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"}
  863. {"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"}
  864. {"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}
  865. {"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"}
  866. {"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"}
  867. {"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"}
  868. {"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}
  869. {"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"}
  870. {"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"}
  871. {"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"}
  872. {"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}
  873. {"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"}
  874. {"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"}
  875. {"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"}
  876. {"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}
  877. {"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"}
  878. {"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"}
  879. {"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"}
  880. {"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}
  881. {"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"}
  882. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Elapsed":0}
  883. {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool"}
  884. {"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"}
  885. {"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"}
  886. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Elapsed":0}
  887. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification"}
  888. {"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"}
  889. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code"}
  890. {"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"}
  891. {"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"}
  892. {"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}
  893. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message"}
  894. {"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"}
  895. {"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"}
  896. {"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}
  897. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message"}
  898. {"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"}
  899. {"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"}
  900. {"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}
  901. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message"}
  902. {"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"}
  903. {"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"}
  904. {"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}
  905. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail"}
  906. {"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"}
  907. {"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"}
  908. {"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}
  909. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code"}
  910. {"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"}
  911. {"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"}
  912. {"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}
  913. {"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"}
  914. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Elapsed":0}
  915. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON"}
  916. {"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"}
  917. {"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"}
  918. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Elapsed":0}
  919. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage"}
  920. {"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"}
  921. {"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"}
  922. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Elapsed":0}
  923. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount"}
  924. {"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"}
  925. {"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"}
  926. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Elapsed":0}
  927. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover"}
  928. {"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"}
  929. {"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"}
  930. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Elapsed":0}
  931. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode"}
  932. {"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"}
  933. {"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"}
  934. {"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"}
  935. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Elapsed":0}
  936. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies"}
  937. {"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"}
  938. {"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"}
  939. {"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"}
  940. {"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"}
  941. {"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}
  942. {"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"}
  943. {"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"}
  944. {"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"}
  945. {"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"}
  946. {"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"}
  947. {"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}
  948. {"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"}
  949. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Elapsed":0}
  950. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver"}
  951. {"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"}
  952. {"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"}
  953. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Elapsed":0}
  954. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse"}
  955. {"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"}
  956. {"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"}
  957. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Elapsed":0}
  958. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes"}
  959. {"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"}
  960. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized"}
  961. {"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"}
  962. {"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"}
  963. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Elapsed":0}
  964. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden"}
  965. {"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"}
  966. {"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"}
  967. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Elapsed":0}
  968. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit"}
  969. {"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"}
  970. {"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"}
  971. {"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}
  972. {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529"}
  973. {"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"}
  974. {"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"}
  975. {"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}
  976. {"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"}
  977. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Elapsed":0}
  978. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover"}
  979. {"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"}
  980. {"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"}
  981. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Elapsed":0}
  982. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal"}
  983. {"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"}
  984. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error"}
  985. {"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"}
  986. {"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"}
  987. {"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}
  988. {"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"}
  989. {"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"}
  990. {"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"}
  991. {"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}
  992. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state"}
  993. {"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"}
  994. {"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"}
  995. {"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}
  996. {"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"}
  997. {"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"}
  998. {"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"}
  999. {"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}
  1000. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type"}
  1001. {"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"}
  1002. {"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"}
  1003. {"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}
  1004. {"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"}
  1005. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Elapsed":0}
  1006. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors"}
  1007. {"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"}
  1008. {"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"}
  1009. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Elapsed":0}
  1010. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects"}
  1011. {"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"}
  1012. {"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"}
  1013. {"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"}
  1014. {"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"}
  1015. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Elapsed":0}
  1016. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce"}
  1017. {"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"}
  1018. {"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"}
  1019. {"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"}
  1020. {"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"}
  1021. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Elapsed":0}
  1022. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated"}
  1023. {"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"}
  1024. {"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"}
  1025. {"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"}
  1026. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Elapsed":0}
  1027. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover"}
  1028. {"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"}
  1029. {"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"}
  1030. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Elapsed":0}
  1031. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce"}
  1032. {"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"}
  1033. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native"}
  1034. {"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"}
  1035. {"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"}
  1036. {"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"}
  1037. {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Elapsed":0}
  1038. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough"}
  1039. {"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"}
  1040. {"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"}
  1041. {"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"}
  1042. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Elapsed":0}
  1043. {"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"}
  1044. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Elapsed":0}
  1045. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock"}
  1046. {"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"}
  1047. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth"}
  1048. {"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"}
  1049. {"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"}
  1050. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Elapsed":0}
  1051. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token"}
  1052. {"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"}
  1053. {"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"}
  1054. {"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}
  1055. {"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"}
  1056. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Elapsed":0}
  1057. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock"}
  1058. {"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"}
  1059. {"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"}
  1060. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Elapsed":0}
  1061. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock"}
  1062. {"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"}
  1063. {"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"}
  1064. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Elapsed":0}
  1065. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock"}
  1066. {"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"}
  1067. {"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"}
  1068. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Elapsed":0}
  1069. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel"}
  1070. {"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"}
  1071. {"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"}
  1072. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Elapsed":0}
  1073. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock"}
  1074. {"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"}
  1075. {"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"}
  1076. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Elapsed":0}
  1077. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires"}
  1078. {"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"}
  1079. {"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"}
  1080. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Elapsed":0}
  1081. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic"}
  1082. {"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"}
  1083. {"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"}
  1084. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Elapsed":0}
  1085. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic"}
  1086. {"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"}
  1087. {"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"}
  1088. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Elapsed":0}
  1089. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys"}
  1090. {"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"}
  1091. {"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"}
  1092. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Elapsed":0}
  1093. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey"}
  1094. {"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"}
  1095. {"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"}
  1096. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Elapsed":0}
  1097. {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe"}
  1098. {"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"}
  1099. {"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"}
  1100. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Elapsed":0}
  1101. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel"}
  1102. {"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"}
  1103. {"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"}
  1104. {"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"}
  1105. {"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"}
  1106. {"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"}
  1107. {"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"}
  1108. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Elapsed":0}
  1109. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope"}
  1110. {"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"}
  1111. {"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"}
  1112. {"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"}
  1113. {"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"}
  1114. {"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"}
  1115. {"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"}
  1116. {"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"}
  1117. {"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"}
  1118. {"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}
  1119. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway"}
  1120. {"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"}
  1121. {"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"}
  1122. {"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"}
  1123. {"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"}
  1124. {"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"}
  1125. {"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"}
  1126. {"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}
  1127. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable"}
  1128. {"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"}
  1129. {"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"}
  1130. {"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"}
  1131. {"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"}
  1132. {"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"}
  1133. {"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"}
  1134. {"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}
  1135. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout"}
  1136. {"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"}
  1137. {"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"}
  1138. {"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"}
  1139. {"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"}
  1140. {"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"}
  1141. {"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"}
  1142. {"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}
  1143. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00"}
  1144. {"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"}
  1145. {"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"}
  1146. {"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"}
  1147. {"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"}
  1148. {"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"}
  1149. {"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"}
  1150. {"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}
  1151. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01"}
  1152. {"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"}
  1153. {"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"}
  1154. {"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"}
  1155. {"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"}
  1156. {"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"}
  1157. {"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"}
  1158. {"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}
  1159. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02"}
  1160. {"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"}
  1161. {"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"}
  1162. {"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"}
  1163. {"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"}
  1164. {"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"}
  1165. {"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"}
  1166. {"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}
  1167. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03"}
  1168. {"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"}
  1169. {"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"}
  1170. {"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"}
  1171. {"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"}
  1172. {"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"}
  1173. {"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"}
  1174. {"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}
  1175. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04"}
  1176. {"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"}
  1177. {"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"}
  1178. {"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"}
  1179. {"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"}
  1180. {"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"}
  1181. {"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"}
  1182. {"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}
  1183. {"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"}
  1184. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Elapsed":0}
  1185. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly"}
  1186. {"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"}
  1187. {"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"}
  1188. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Elapsed":0}
  1189. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice"}
  1190. {"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"}
  1191. {"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"}
  1192. {"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"}
  1193. {"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"}
  1194. {"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"}
  1195. {"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"}
  1196. {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Elapsed":0}
  1197. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400"}
  1198. {"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"}
  1199. {"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"}
  1200. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Elapsed":0}
  1201. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount"}
  1202. {"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"}
  1203. {"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"}
  1204. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Elapsed":0}
  1205. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown"}
  1206. {"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"}
  1207. {"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"}
  1208. {"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}
  1209. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported"}
  1210. {"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"}
  1211. {"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"}
  1212. {"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}
  1213. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe"}
  1214. {"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"}
  1215. {"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"}
  1216. {"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"}
  1217. {"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"}
  1218. {"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}
  1219. {"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"}
  1220. {"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"}
  1221. {"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"}
  1222. {"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}
  1223. {"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"}
  1224. {"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}
  1225. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff"}
  1226. {"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"}
  1227. {"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"}
  1228. {"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"}
  1229. {"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"}
  1230. {"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}
  1231. {"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"}
  1232. {"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"}
  1233. {"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"}
  1234. {"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}
  1235. {"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"}
  1236. {"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}
  1237. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability"}
  1238. {"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"}
  1239. {"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"}
  1240. {"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"}
  1241. {"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"}
  1242. {"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}
  1243. {"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"}
  1244. {"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"}
  1245. {"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"}
  1246. {"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}
  1247. {"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"}
  1248. {"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}
  1249. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility"}
  1250. {"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"}
  1251. {"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"}
  1252. {"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"}
  1253. {"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"}
  1254. {"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}
  1255. {"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"}
  1256. {"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"}
  1257. {"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"}
  1258. {"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}
  1259. {"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"}
  1260. {"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}
  1261. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability"}
  1262. {"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"}
  1263. {"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"}
  1264. {"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}
  1265. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount"}
  1266. {"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"}
  1267. {"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"}
  1268. {"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}
  1269. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown"}
  1270. {"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"}
  1271. {"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"}
  1272. {"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}
  1273. {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok"}
  1274. {"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"}
  1275. {"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"}
  1276. {"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}
  1277. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier"}
  1278. {"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"}
  1279. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil"}
  1280. {"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"}
  1281. {"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"}
  1282. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Elapsed":0}
  1283. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai"}
  1284. {"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"}
  1285. {"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"}
  1286. {"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}
  1287. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok"}
  1288. {"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"}
  1289. {"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"}
  1290. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Elapsed":0}
  1291. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown"}
  1292. {"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"}
  1293. {"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"}
  1294. {"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}
  1295. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported"}
  1296. {"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"}
  1297. {"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"}
  1298. {"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}
  1299. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported"}
  1300. {"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"}
  1301. {"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"}
  1302. {"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}
  1303. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on"}
  1304. {"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"}
  1305. {"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"}
  1306. {"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}
  1307. {"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"}
  1308. {"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"}
  1309. {"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"}
  1310. {"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}
  1311. {"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"}
  1312. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Elapsed":0}
  1313. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset"}
  1314. {"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"}
  1315. {"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"}
  1316. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Elapsed":0}
  1317. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect"}
  1318. {"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"}
  1319. {"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"}
  1320. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Elapsed":0}
  1321. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow"}
  1322. {"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"}
  1323. {"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"}
  1324. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Elapsed":0}
  1325. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent"}
  1326. {"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"}
  1327. {"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"}
  1328. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Elapsed":0}
  1329. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral"}
  1330. {"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"}
  1331. {"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"}
  1332. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Elapsed":0}
  1333. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral"}
  1334. {"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"}
  1335. {"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"}
  1336. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Elapsed":0}
  1337. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary"}
  1338. {"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"}
  1339. {"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"}
  1340. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Elapsed":0}
  1341. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining"}
  1342. {"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"}
  1343. {"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"}
  1344. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Elapsed":0}
  1345. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect"}
  1346. {"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"}
  1347. {"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"}
  1348. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Elapsed":0}
  1349. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig"}
  1350. {"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"}
  1351. {"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"}
  1352. {"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}
  1353. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig"}
  1354. {"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"}
  1355. {"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"}
  1356. {"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"}
  1357. {"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"}
  1358. {"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}
  1359. {"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"}
  1360. {"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"}
  1361. {"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"}
  1362. {"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}
  1363. {"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"}
  1364. {"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"}
  1365. {"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"}
  1366. {"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}
  1367. {"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"}
  1368. {"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}
  1369. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness"}
  1370. {"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"}
  1371. {"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"}
  1372. {"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}
  1373. {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons"}
  1374. {"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"}
  1375. {"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"}
  1376. {"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}
  1377. {"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"}
  1378. {"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"}
  1379. {"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"}
  1380. {"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}
  1381. {"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"}
  1382. {"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"}
  1383. {"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"}
  1384. {"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}
  1385. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount"}
  1386. {"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"}
  1387. {"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"}
  1388. {"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}
  1389. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot"}
  1390. {"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"}
  1391. {"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"}
  1392. {"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}
  1393. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey"}
  1394. {"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"}
  1395. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号"}
  1396. {"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"}
  1397. {"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"}
  1398. {"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}
  1399. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号"}
  1400. {"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"}
  1401. {"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"}
  1402. {"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}
  1403. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号"}
  1404. {"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"}
  1405. {"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"}
  1406. {"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}
  1407. {"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"}
  1408. {"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}
  1409. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount"}
  1410. {"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"}
  1411. {"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"}
  1412. {"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}
  1413. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount"}
  1414. {"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"}
  1415. {"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"}
  1416. {"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}
  1417. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts"}
  1418. {"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"}
  1419. {"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"}
  1420. {"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"}
  1421. {"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"}
  1422. {"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}
  1423. {"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"}
  1424. {"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"}
  1425. {"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"}
  1426. {"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}
  1427. {"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"}
  1428. {"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"}
  1429. {"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"}
  1430. {"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}
  1431. {"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"}
  1432. {"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}
  1433. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion"}
  1434. {"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"}
  1435. {"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"}
  1436. {"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}
  1437. {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported"}
  1438. {"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"}
  1439. {"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"}
  1440. {"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}
  1441. {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically"}
  1442. {"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"}
  1443. {"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"}
  1444. {"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}
  1445. {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool"}
  1446. {"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"}
  1447. {"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"}
  1448. {"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}
  1449. {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting"}
  1450. {"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"}
  1451. {"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"}
  1452. {"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}
  1453. {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst"}
  1454. {"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"}
  1455. {"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"}
  1456. {"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}
  1457. {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext"}
  1458. {"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"}
  1459. {"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"}
  1460. {"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}
  1461. {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding"}
  1462. {"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"}
  1463. {"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"}
  1464. {"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}
  1465. {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount"}
  1466. {"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"}
  1467. {"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"}
  1468. {"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}
  1469. {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings"}
  1470. {"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"}
  1471. {"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"}
  1472. {"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}
  1473. {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp"}
  1474. {"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"}
  1475. {"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"}
  1476. {"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}
  1477. {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy"}
  1478. {"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"}
  1479. {"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"}
  1480. {"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}
  1481. {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined"}
  1482. {"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"}
  1483. {"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"}
  1484. {"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}
  1485. {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate"}
  1486. {"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"}
  1487. {"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"}
  1488. {"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}
  1489. {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold"}
  1490. {"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"}
  1491. {"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"}
  1492. {"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}
  1493. {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold"}
  1494. {"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"}
  1495. {"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"}
  1496. {"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}
  1497. {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold"}
  1498. {"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"}
  1499. {"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"}
  1500. {"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}
  1501. {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior"}
  1502. {"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"}
  1503. {"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"}
  1504. {"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}
  1505. {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold"}
  1506. {"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"}
  1507. {"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"}
  1508. {"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}
  1509. {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault"}
  1510. {"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"}
  1511. {"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"}
  1512. {"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}
  1513. {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped"}
  1514. {"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"}
  1515. {"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"}
  1516. {"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}
  1517. {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause"}
  1518. {"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"}
  1519. {"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"}
  1520. {"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}
  1521. {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses"}
  1522. {"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"}
  1523. {"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"}
  1524. {"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}
  1525. {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994"}
  1526. {"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"}
  1527. {"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"}
  1528. {"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}
  1529. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994"}
  1530. {"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"}
  1531. {"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"}
  1532. {"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}
  1533. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate"}
  1534. {"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"}
  1535. {"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"}
  1536. {"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}
  1537. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel"}
  1538. {"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"}
  1539. {"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"}
  1540. {"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}
  1541. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount"}
  1542. {"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"}
  1543. {"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"}
  1544. {"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}
  1545. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate"}
  1546. {"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"}
  1547. {"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"}
  1548. {"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}
  1549. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount"}
  1550. {"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"}
  1551. {"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"}
  1552. {"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}
  1553. {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount"}
  1554. {"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"}
  1555. {"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"}
  1556. {"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}
  1557. {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool"}
  1558. {"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"}
  1559. {"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"}
  1560. {"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}
  1561. {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky"}
  1562. {"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"}
  1563. {"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"}
  1564. {"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}
  1565. {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky"}
  1566. {"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"}
  1567. {"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"}
  1568. {"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}
  1569. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky"}
  1570. {"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"}
  1571. {"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"}
  1572. {"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}
  1573. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT"}
  1574. {"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"}
  1575. {"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"}
  1576. {"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"}
  1577. {"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}
  1578. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate"}
  1579. {"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"}
  1580. {"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"}
  1581. {"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"}
  1582. {"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}
  1583. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes"}
  1584. {"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"}
  1585. {"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"}
  1586. {"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"}
  1587. {"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}
  1588. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior"}
  1589. {"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"}
  1590. {"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"}
  1591. {"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}
  1592. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst"}
  1593. {"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"}
  1594. {"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"}
  1595. {"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}
  1596. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull"}
  1597. {"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"}
  1598. {"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"}
  1599. {"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}
  1600. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore"}
  1601. {"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"}
  1602. {"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"}
  1603. {"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}
  1604. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool"}
  1605. {"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"}
  1606. {"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"}
  1607. {"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}
  1608. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel"}
  1609. {"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"}
  1610. {"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"}
  1611. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Elapsed":0}
  1612. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState"}
  1613. {"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"}
  1614. {"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"}
  1615. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Elapsed":0}
  1616. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary"}
  1617. {"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"}
  1618. {"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"}
  1619. {"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}
  1620. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP"}
  1621. {"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"}
  1622. {"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"}
  1623. {"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}
  1624. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount"}
  1625. {"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"}
  1626. {"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"}
  1627. {"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}
  1628. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup"}
  1629. {"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"}
  1630. {"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"}
  1631. {"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}
  1632. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount"}
  1633. {"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"}
  1634. {"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"}
  1635. {"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}
  1636. {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback"}
  1637. {"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"}
  1638. {"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"}
  1639. {"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}
  1640. {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused"}
  1641. {"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"}
  1642. {"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"}
  1643. {"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}
  1644. {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics"}
  1645. {"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"}
  1646. {"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"}
  1647. {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Elapsed":0}
  1648. {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot"}
  1649. {"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"}
  1650. {"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"}
  1651. {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Elapsed":0}
  1652. {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent"}
  1653. {"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"}
  1654. {"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"}
  1655. {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Elapsed":0}
  1656. {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates"}
  1657. {"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"}
  1658. {"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"}
  1659. {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Elapsed":0}
  1660. {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed"}
  1661. {"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"}
  1662. {"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"}
  1663. {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Elapsed":0}
  1664. {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions"}
  1665. {"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"}
  1666. {"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"}
  1667. {"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}
  1668. {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy"}
  1669. {"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"}
  1670. {"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"}
  1671. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Elapsed":0}
  1672. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores"}
  1673. {"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"}
  1674. {"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"}
  1675. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Elapsed":0}
  1676. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks"}
  1677. {"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"}
  1678. {"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"}
  1679. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Elapsed":0}
  1680. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType"}
  1681. {"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"}
  1682. {"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"}
  1683. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Elapsed":0}
  1684. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot"}
  1685. {"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"}
  1686. {"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"}
  1687. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Elapsed":0}
  1688. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults"}
  1689. {"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"}
  1690. {"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"}
  1691. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Elapsed":0}
  1692. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches"}
  1693. {"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"}
  1694. {"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"}
  1695. {"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}
  1696. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount"}
  1697. {"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"}
  1698. {"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"}
  1699. {"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}
  1700. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable"}
  1701. {"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"}
  1702. {"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"}
  1703. {"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}
  1704. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates"}
  1705. {"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"}
  1706. {"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"}
  1707. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Elapsed":0}
  1708. {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime"}
  1709. {"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"}
  1710. {"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"}
  1711. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Elapsed":0}
  1712. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral"}
  1713. {"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"}
  1714. {"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"}
  1715. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Elapsed":0}
  1716. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal"}
  1717. {"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"}
  1718. {"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"}
  1719. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Elapsed":0}
  1720. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier"}
  1721. {"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"}
  1722. {"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"}
  1723. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Elapsed":0}
  1724. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates"}
  1725. {"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"}
  1726. {"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"}
  1727. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Elapsed":0}
  1728. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms"}
  1729. {"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"}
  1730. {"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"}
  1731. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Elapsed":0}
  1732. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference"}
  1733. {"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"}
  1734. {"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"}
  1735. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Elapsed":0}
  1736. {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference"}
  1737. {"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"}
  1738. {"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"}
  1739. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Elapsed":0}
  1740. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal"}
  1741. {"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"}
  1742. {"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"}
  1743. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Elapsed":0}
  1744. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler"}
  1745. {"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"}
  1746. {"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"}
  1747. {"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"}
  1748. {"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"}
  1749. {"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}
  1750. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch"}
  1751. {"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"}
  1752. {"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"}
  1753. {"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}
  1754. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled"}
  1755. {"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"}
  1756. {"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"}
  1757. {"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}
  1758. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure"}
  1759. {"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"}
  1760. {"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"}
  1761. {"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}
  1762. {"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"}
  1763. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Elapsed":0}
  1764. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch"}
  1765. {"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"}
  1766. {"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"}
  1767. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Elapsed":0}
  1768. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount"}
  1769. {"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"}
  1770. {"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"}
  1771. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Elapsed":0}
  1772. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly"}
  1773. {"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"}
  1774. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh"}
  1775. {"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"}
  1776. {"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"}
  1777. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Elapsed":0}
  1778. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate"}
  1779. {"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"}
  1780. {"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"}
  1781. {"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}
  1782. {"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"}
  1783. {"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"}
  1784. {"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"}
  1785. {"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}
  1786. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale"}
  1787. {"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"}
  1788. {"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"}
  1789. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Elapsed":0}
  1790. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future"}
  1791. {"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"}
  1792. {"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"}
  1793. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Elapsed":0}
  1794. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported"}
  1795. {"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"}
  1796. {"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"}
  1797. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Elapsed":0}
  1798. {"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"}
  1799. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Elapsed":0}
  1800. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling"}
  1801. {"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"}
  1802. {"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"}
  1803. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Elapsed":0}
  1804. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope"}
  1805. {"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"}
  1806. {"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"}
  1807. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Elapsed":0}
  1808. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal"}
  1809. {"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"}
  1810. {"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"}
  1811. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Elapsed":0}
  1812. {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal"}
  1813. {"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"}
  1814. {"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"}
  1815. {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Elapsed":0}
  1816. {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion"}
  1817. {"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"}
  1818. {"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"}
  1819. {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Elapsed":0}
  1820. {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce"}
  1821. {"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"}
  1822. {"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"}
  1823. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Elapsed":0}
  1824. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders"}
  1825. {"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"}
  1826. {"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"}
  1827. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Elapsed":0}
  1828. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues"}
  1829. {"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"}
  1830. {"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"}
  1831. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Elapsed":0}
  1832. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes"}
  1833. {"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"}
  1834. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth"}
  1835. {"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"}
  1836. {"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"}
  1837. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Elapsed":0}
  1838. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token"}
  1839. {"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"}
  1840. {"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"}
  1841. {"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}
  1842. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key"}
  1843. {"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"}
  1844. {"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"}
  1845. {"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}
  1846. {"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"}
  1847. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Elapsed":0}
  1848. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody"}
  1849. {"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"}
  1850. {"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"}
  1851. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Elapsed":0}
  1852. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken"}
  1853. {"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"}
  1854. {"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"}
  1855. {"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"}
  1856. {"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"}
  1857. {"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}
  1858. {"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"}
  1859. {"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"}
  1860. {"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"}
  1861. {"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}
  1862. {"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"}
  1863. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Elapsed":0}
  1864. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded"}
  1865. {"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"}
  1866. {"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"}
  1867. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Elapsed":0}
  1868. {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce"}
  1869. {"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"}
  1870. {"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"}
  1871. {"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"}
  1872. {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Elapsed":0}
  1873. {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce"}
  1874. {"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"}
  1875. {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions"}
  1876. {"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"}
  1877. {"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"}
  1878. {"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}
  1879. {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages"}
  1880. {"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"}
  1881. {"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"}
  1882. {"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}
  1883. {"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"}
  1884. {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Elapsed":0}
  1885. {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable"}
  1886. {"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"}
  1887. {"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"}
  1888. {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Elapsed":0}
  1889. {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature"}
  1890. {"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"}
  1891. {"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"}
  1892. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Elapsed":0}
  1893. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse"}
  1894. {"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"}
  1895. {"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"}
  1896. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Elapsed":0}
  1897. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects"}
  1898. {"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"}
  1899. {"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"}
  1900. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Elapsed":0}
  1901. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping"}
  1902. {"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"}
  1903. {"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"}
  1904. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Elapsed":0}
  1905. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields"}
  1906. {"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"}
  1907. {"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"}
  1908. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Elapsed":0}
  1909. {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported"}
  1910. {"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"}
  1911. {"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"}
  1912. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Elapsed":0}
  1913. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions"}
  1914. {"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"}
  1915. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502"}
  1916. {"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"}
  1917. {"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"}
  1918. {"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}
  1919. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity"}
  1920. {"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"}
  1921. {"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"}
  1922. {"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}
  1923. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload"}
  1924. {"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"}
  1925. {"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"}
  1926. {"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}
  1927. {"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"}
  1928. {"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"}
  1929. {"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"}
  1930. {"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}
  1931. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path"}
  1932. {"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"}
  1933. {"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"}
  1934. {"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}
  1935. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request"}
  1936. {"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"}
  1937. {"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"}
  1938. {"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}
  1939. {"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"}
  1940. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Elapsed":0}
  1941. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled"}
  1942. {"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"}
  1943. {"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"}
  1944. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Elapsed":0}
  1945. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState"}
  1946. {"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"}
  1947. {"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"}
  1948. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Elapsed":0}
  1949. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache"}
  1950. {"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"}
  1951. {"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"}
  1952. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Elapsed":0}
  1953. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders"}
  1954. {"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"}
  1955. {"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"}
  1956. {"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"}
  1957. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Elapsed":0}
  1958. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders"}
  1959. {"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"}
  1960. {"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"}
  1961. {"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"}
  1962. {"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"}
  1963. {"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}
  1964. {"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"}
  1965. {"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"}
  1966. {"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"}
  1967. {"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}
  1968. {"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"}
  1969. {"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"}
  1970. {"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"}
  1971. {"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}
  1972. {"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"}
  1973. {"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"}
  1974. {"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"}
  1975. {"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}
  1976. {"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"}
  1977. {"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"}
  1978. {"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"}
  1979. {"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}
  1980. {"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"}
  1981. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Elapsed":0}
  1982. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown"}
  1983. {"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"}
  1984. {"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"}
  1985. {"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"}
  1986. {"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"}
  1987. {"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"}
  1988. {"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}
  1989. {"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"}
  1990. {"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"}
  1991. {"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"}
  1992. {"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"}
  1993. {"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}
  1994. {"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"}
  1995. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Elapsed":0}
  1996. {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist"}
  1997. {"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"}
  1998. {"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"}
  1999. {"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"}
  2000. {"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"}
  2001. {"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"}
  2002. {"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}
  2003. {"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"}
  2004. {"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"}
  2005. {"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"}
  2006. {"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"}
  2007. {"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"}
  2008. {"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}
  2009. {"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"}
  2010. {"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"}
  2011. {"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"}
  2012. {"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"}
  2013. {"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"}
  2014. {"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}
  2015. {"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"}
  2016. {"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"}
  2017. {"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"}
  2018. {"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"}
  2019. {"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}
  2020. {"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"}
  2021. {"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"}
  2022. {"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"}
  2023. {"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"}
  2024. {"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"}
  2025. {"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}
  2026. {"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"}
  2027. {"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"}
  2028. {"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"}
  2029. {"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"}
  2030. {"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}
  2031. {"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"}
  2032. {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Elapsed":0}
  2033. {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough"}
  2034. {"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"}
  2035. {"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"}
  2036. {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Elapsed":0}
  2037. {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry"}
  2038. {"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"}
  2039. {"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"}
  2040. {"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"}
  2041. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Elapsed":0}
  2042. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts"}
  2043. {"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"}
  2044. {"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"}
  2045. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Elapsed":0}
  2046. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput"}
  2047. {"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"}
  2048. {"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"}
  2049. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Elapsed":0}
  2050. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver"}
  2051. {"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"}
  2052. {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native"}
  2053. {"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"}
  2054. {"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"}
  2055. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Elapsed":0}
  2056. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough"}
  2057. {"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"}
  2058. {"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"}
  2059. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Elapsed":0}
  2060. {"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"}
  2061. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Elapsed":0}
  2062. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver"}
  2063. {"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"}
  2064. {"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"}
  2065. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Elapsed":0}
  2066. {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient"}
  2067. {"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"}
  2068. {"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"}
  2069. {"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"}
  2070. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Elapsed":0}
  2071. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded"}
  2072. {"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"}
  2073. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native"}
  2074. {"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"}
  2075. {"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"}
  2076. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Elapsed":0}
  2077. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough"}
  2078. {"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"}
  2079. {"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"}
  2080. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Elapsed":0}
  2081. {"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"}
  2082. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Elapsed":0}
  2083. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient"}
  2084. {"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"}
  2085. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写"}
  2086. {"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"}
  2087. {"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"}
  2088. {"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}
  2089. {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写"}
  2090. {"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"}
  2091. {"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"}
  2092. {"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}
  2093. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code"}
  2094. {"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"}
  2095. {"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"}
  2096. {"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}
  2097. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code"}
  2098. {"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"}
  2099. {"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"}
  2100. {"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}
  2101. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写"}
  2102. {"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"}
  2103. {"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"}
  2104. {"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}
  2105. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写"}
  2106. {"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"}
  2107. {"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"}
  2108. {"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}
  2109. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写"}
  2110. {"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"}
  2111. {"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"}
  2112. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Elapsed":0}
  2113. {"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"}
  2114. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Elapsed":0}
  2115. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource"}
  2116. {"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"}
  2117. {"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"}
  2118. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Elapsed":0}
  2119. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders"}
  2120. {"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"}
  2121. {"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"}
  2122. {"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"}
  2123. {"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"}
  2124. {"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}
  2125. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough"}
  2126. {"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"}
  2127. {"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"}
  2128. {"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}
  2129. {"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"}
  2130. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Elapsed":0}
  2131. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed"}
  2132. {"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"}
  2133. {"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"}
  2134. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Elapsed":0}
  2135. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect"}
  2136. {"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"}
  2137. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过"}
  2138. {"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"}
  2139. {"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"}
  2140. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Elapsed":0}
  2141. {"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_命中"}
  2142. {"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"}
  2143. {"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"}
  2144. {"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}
  2145. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中"}
  2146. {"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"}
  2147. {"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"}
  2148. {"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}
  2149. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中"}
  2150. {"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"}
  2151. {"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"}
  2152. {"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}
  2153. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中"}
  2154. {"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"}
  2155. {"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"}
  2156. {"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}
  2157. {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝"}
  2158. {"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"}
  2159. {"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"}
  2160. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Elapsed":0}
  2161. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过"}
  2162. {"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"}
  2163. {"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"}
  2164. {"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}
  2165. {"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"}
  2166. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Elapsed":0}
  2167. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients"}
  2168. {"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"}
  2169. {"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_签名仍拒绝"}
  2170. {"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"}
  2171. {"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"}
  2172. {"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}
  2173. {"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_时直接绕过"}
  2174. {"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"}
  2175. {"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"}
  2176. {"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}
  2177. {"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)"}
  2178. {"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"}
  2179. {"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"}
  2180. {"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}
  2181. {"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"}
  2182. {"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"}
  2183. {"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"}
  2184. {"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}
  2185. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403"}
  2186. {"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"}
  2187. {"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"}
  2188. {"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}
  2189. {"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"}
  2190. {"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}
  2191. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage"}
  2192. {"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"}
  2193. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求"}
  2194. {"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"}
  2195. {"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"}
  2196. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Elapsed":0}
  2197. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许"}
  2198. {"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"}
  2199. {"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"}
  2200. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Elapsed":0}
  2201. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句"}
  2202. {"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"}
  2203. {"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"}
  2204. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Elapsed":0}
  2205. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句"}
  2206. {"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"}
  2207. {"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"}
  2208. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Elapsed":0}
  2209. {"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"}
  2210. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Elapsed":0}
  2211. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet"}
  2212. {"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"}
  2213. {"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"}
  2214. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Elapsed":0}
  2215. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue"}
  2216. {"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"}
  2217. {"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"}
  2218. {"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"}
  2219. {"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"}
  2220. {"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}
  2221. {"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"}
  2222. {"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"}
  2223. {"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"}
  2224. {"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}
  2225. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias"}
  2226. {"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"}
  2227. {"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"}
  2228. {"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}
  2229. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias"}
  2230. {"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"}
  2231. {"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"}
  2232. {"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}
  2233. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string"}
  2234. {"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"}
  2235. {"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"}
  2236. {"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}
  2237. {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type"}
  2238. {"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"}
  2239. {"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"}
  2240. {"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}
  2241. {"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"}
  2242. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Elapsed":0}
  2243. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput"}
  2244. {"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"}
  2245. {"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"}
  2246. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Elapsed":0}
  2247. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport"}
  2248. {"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"}
  2249. {"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"}
  2250. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Elapsed":0}
  2251. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount"}
  2252. {"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"}
  2253. {"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"}
  2254. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Elapsed":0}
  2255. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource"}
  2256. {"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"}
  2257. {"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"}
  2258. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Elapsed":0}
  2259. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext"}
  2260. {"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"}
  2261. {"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"}
  2262. {"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"}
  2263. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Elapsed":0}
  2264. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount"}
  2265. {"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"}
  2266. {"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"}
  2267. {"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"}
  2268. {"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"}
  2269. {"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"}
  2270. {"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"}
  2271. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Elapsed":0}
  2272. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount"}
  2273. {"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"}
  2274. {"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"}
  2275. {"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"}
  2276. {"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"}
  2277. {"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"}
  2278. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Elapsed":0}
  2279. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
  2280. {"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"}
  2281. {"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"}
  2282. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
  2283. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
  2284. {"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"}
  2285. {"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"}
  2286. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
  2287. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode"}
  2288. {"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"}
  2289. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号"}
  2290. {"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"}
  2291. {"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"}
  2292. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Elapsed":0}
  2293. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号"}
  2294. {"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"}
  2295. {"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"}
  2296. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Elapsed":0}
  2297. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token"}
  2298. {"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"}
  2299. {"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"}
  2300. {"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}
  2301. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token"}
  2302. {"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"}
  2303. {"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"}
  2304. {"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}
  2305. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off"}
  2306. {"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"}
  2307. {"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"}
  2308. {"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}
  2309. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off"}
  2310. {"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"}
  2311. {"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"}
  2312. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Elapsed":0}
  2313. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off"}
  2314. {"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"}
  2315. {"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"}
  2316. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Elapsed":0}
  2317. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off"}
  2318. {"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"}
  2319. {"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"}
  2320. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Elapsed":0}
  2321. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device"}
  2322. {"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"}
  2323. {"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"}
  2324. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Elapsed":0}
  2325. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session"}
  2326. {"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"}
  2327. {"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"}
  2328. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Elapsed":0}
  2329. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full"}
  2330. {"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"}
  2331. {"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"}
  2332. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Elapsed":0}
  2333. {"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"}
  2334. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Elapsed":0}
  2335. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff"}
  2336. {"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"}
  2337. {"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"}
  2338. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Elapsed":0}
  2339. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff"}
  2340. {"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"}
  2341. {"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"}
  2342. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Elapsed":0}
  2343. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored"}
  2344. {"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"}
  2345. {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device"}
  2346. {"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"}
  2347. {"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"}
  2348. {"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}
  2349. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session"}
  2350. {"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"}
  2351. {"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"}
  2352. {"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}
  2353. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full"}
  2354. {"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"}
  2355. {"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"}
  2356. {"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}
  2357. {"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"}
  2358. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Elapsed":0}
  2359. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed"}
  2360. {"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"}
  2361. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing"}
  2362. {"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"}
  2363. {"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"}
  2364. {"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}
  2365. {"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"}
  2366. {"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"}
  2367. {"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"}
  2368. {"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}
  2369. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank"}
  2370. {"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"}
  2371. {"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"}
  2372. {"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}
  2373. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase"}
  2374. {"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"}
  2375. {"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"}
  2376. {"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}
  2377. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid"}
  2378. {"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"}
  2379. {"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"}
  2380. {"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}
  2381. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string"}
  2382. {"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"}
  2383. {"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"}
  2384. {"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}
  2385. {"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"}
  2386. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Elapsed":0}
  2387. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode"}
  2388. {"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"}
  2389. {"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"}
  2390. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Elapsed":0}
  2391. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode"}
  2392. {"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"}
  2393. {"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"}
  2394. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Elapsed":0}
  2395. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode"}
  2396. {"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"}
  2397. {"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"}
  2398. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Elapsed":0}
  2399. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients"}
  2400. {"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"}
  2401. {"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"}
  2402. {"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}
  2403. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode"}
  2404. {"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"}
  2405. {"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"}
  2406. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Elapsed":0}
  2407. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode"}
  2408. {"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"}
  2409. {"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"}
  2410. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Elapsed":0}
  2411. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode"}
  2412. {"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"}
  2413. {"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"}
  2414. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Elapsed":0}
  2415. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode"}
  2416. {"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"}
  2417. {"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"}
  2418. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Elapsed":0}
  2419. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode"}
  2420. {"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"}
  2421. {"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"}
  2422. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Elapsed":0}
  2423. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence"}
  2424. {"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"}
  2425. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default"}
  2426. {"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"}
  2427. {"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"}
  2428. {"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}
  2429. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default"}
  2430. {"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"}
  2431. {"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"}
  2432. {"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}
  2433. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override"}
  2434. {"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"}
  2435. {"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"}
  2436. {"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}
  2437. {"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"}
  2438. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Elapsed":0}
  2439. {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives"}
  2440. {"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"}
  2441. {"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"}
  2442. {"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"}
  2443. {"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"}
  2444. {"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}
  2445. {"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"}
  2446. {"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"}
  2447. {"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"}
  2448. {"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}
  2449. {"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"}
  2450. {"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"}
  2451. {"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"}
  2452. {"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}
  2453. {"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"}
  2454. {"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"}
  2455. {"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"}
  2456. {"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}
  2457. {"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"}
  2458. {"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"}
  2459. {"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"}
  2460. {"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}
  2461. {"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"}
  2462. {"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"}
  2463. {"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"}
  2464. {"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}
  2465. {"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"}
  2466. {"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"}
  2467. {"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"}
  2468. {"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}
  2469. {"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"}
  2470. {"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"}
  2471. {"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"}
  2472. {"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}
  2473. {"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"}
  2474. {"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"}
  2475. {"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"}
  2476. {"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}
  2477. {"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"}
  2478. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Elapsed":0}
  2479. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant"}
  2480. {"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"}
  2481. {"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"}
  2482. {"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"}
  2483. {"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"}
  2484. {"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}
  2485. {"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"}
  2486. {"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"}
  2487. {"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"}
  2488. {"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}
  2489. {"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"}
  2490. {"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"}
  2491. {"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"}
  2492. {"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}
  2493. {"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"}
  2494. {"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"}
  2495. {"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"}
  2496. {"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}
  2497. {"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"}
  2498. {"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"}
  2499. {"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"}
  2500. {"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}
  2501. {"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"}
  2502. {"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"}
  2503. {"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"}
  2504. {"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}
  2505. {"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"}
  2506. {"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"}
  2507. {"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"}
  2508. {"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}
  2509. {"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"}
  2510. {"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"}
  2511. {"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"}
  2512. {"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}
  2513. {"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"}
  2514. {"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"}
  2515. {"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"}
  2516. {"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}
  2517. {"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"}
  2518. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Elapsed":0}
  2519. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields"}
  2520. {"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"}
  2521. {"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"}
  2522. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Elapsed":0}
  2523. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop"}
  2524. {"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"}
  2525. {"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"}
  2526. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Elapsed":0}
  2527. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount"}
  2528. {"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"}
  2529. {"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"}
  2530. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Elapsed":0}
  2531. {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount"}
  2532. {"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"}
  2533. {"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"}
  2534. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Elapsed":0}
  2535. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount"}
  2536. {"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"}
  2537. {"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"}
  2538. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Elapsed":0}
  2539. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint"}
  2540. {"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"}
  2541. {"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"}
  2542. {"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"}
  2543. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Elapsed":0}
  2544. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession"}
  2545. {"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"}
  2546. {"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"}
  2547. {"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"}
  2548. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Elapsed":0}
  2549. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched"}
  2550. {"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"}
  2551. {"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"}
  2552. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Elapsed":0}
  2553. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders"}
  2554. {"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"}
  2555. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头"}
  2556. {"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"}
  2557. {"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"}
  2558. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Elapsed":0}
  2559. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一"}
  2560. {"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"}
  2561. {"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"}
  2562. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Elapsed":0}
  2563. {"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"}
  2564. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Elapsed":0}
  2565. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders"}
  2566. {"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"}
  2567. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份"}
  2568. {"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"}
  2569. {"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"}
  2570. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Elapsed":0}
  2571. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator"}
  2572. {"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"}
  2573. {"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"}
  2574. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Elapsed":0}
  2575. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份"}
  2576. {"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"}
  2577. {"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"}
  2578. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Elapsed":0}
  2579. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份"}
  2580. {"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"}
  2581. {"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"}
  2582. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Elapsed":0}
  2583. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)"}
  2584. {"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"}
  2585. {"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"}
  2586. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Elapsed":0}
  2587. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失"}
  2588. {"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"}
  2589. {"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"}
  2590. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Elapsed":0}
  2591. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端"}
  2592. {"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"}
  2593. {"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"}
  2594. {"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}
  2595. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本"}
  2596. {"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"}
  2597. {"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"}
  2598. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Elapsed":0}
  2599. {"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"}
  2600. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Elapsed":0}
  2601. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA"}
  2602. {"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"}
  2603. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段"}
  2604. {"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"}
  2605. {"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"}
  2606. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Elapsed":0}
  2607. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份"}
  2608. {"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"}
  2609. {"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"}
  2610. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Elapsed":0}
  2611. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建"}
  2612. {"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"}
  2613. {"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"}
  2614. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Elapsed":0}
  2615. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本"}
  2616. {"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"}
  2617. {"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"}
  2618. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Elapsed":0}
  2619. {"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"}
  2620. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Elapsed":0}
  2621. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver"}
  2622. {"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"}
  2623. {"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"}
  2624. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Elapsed":0}
  2625. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA"}
  2626. {"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"}
  2627. {"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"}
  2628. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Elapsed":0}
  2629. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled"}
  2630. {"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"}
  2631. {"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"}
  2632. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Elapsed":0}
  2633. {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled"}
  2634. {"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"}
  2635. {"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"}
  2636. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Elapsed":0}
  2637. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback"}
  2638. {"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"}
  2639. {"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"}
  2640. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Elapsed":0}
  2641. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent"}
  2642. {"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"}
  2643. {"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"}
  2644. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Elapsed":0}
  2645. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop"}
  2646. {"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"}
  2647. {"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"}
  2648. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Elapsed":0}
  2649. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion"}
  2650. {"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"}
  2651. {"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"}
  2652. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Elapsed":0}
  2653. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent"}
  2654. {"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"}
  2655. {"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"}
  2656. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Elapsed":0}
  2657. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver"}
  2658. {"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"}
  2659. {"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"}
  2660. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Elapsed":0}
  2661. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver"}
  2662. {"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"}
  2663. {"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"}
  2664. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Elapsed":0}
  2665. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations"}
  2666. {"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"}
  2667. {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback"}
  2668. {"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"}
  2669. {"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"}
  2670. {"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}
  2671. {"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"}
  2672. {"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"}
  2673. {"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"}
  2674. {"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}
  2675. {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability"}
  2676. {"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"}
  2677. {"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"}
  2678. {"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}
  2679. {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge"}
  2680. {"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"}
  2681. {"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"}
  2682. {"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}
  2683. {"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"}
  2684. {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Elapsed":0}
  2685. {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse"}
  2686. {"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"}
  2687. {"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"}
  2688. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Elapsed":0}
  2689. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
  2690. {"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"}
  2691. {"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"}
  2692. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
  2693. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
  2694. {"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"}
  2695. {"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"}
  2696. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
  2697. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
  2698. {"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"}
  2699. {"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"}
  2700. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
  2701. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
  2702. {"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"}
  2703. {"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"}
  2704. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
  2705. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
  2706. {"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"}
  2707. {"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"}
  2708. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
  2709. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
  2710. {"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"}
  2711. {"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"}
  2712. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
  2713. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
  2714. {"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"}
  2715. {"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"}
  2716. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
  2717. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
  2718. {"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"}
  2719. {"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"}
  2720. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
  2721. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
  2722. {"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"}
  2723. {"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"}
  2724. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
  2725. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
  2726. {"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"}
  2727. {"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"}
  2728. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
  2729. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
  2730. {"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"}
  2731. {"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"}
  2732. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
  2733. {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias"}
  2734. {"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"}
  2735. {"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"}
  2736. {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Elapsed":0}
  2737. {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard"}
  2738. {"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"}
  2739. {"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"}
  2740. {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Elapsed":0}
  2741. {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting"}
  2742. {"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"}
  2743. {"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"}
  2744. {"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"}
  2745. {"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"}
  2746. {"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}
  2747. {"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"}
  2748. {"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"}
  2749. {"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"}
  2750. {"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}
  2751. {"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"}
  2752. {"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"}
  2753. {"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"}
  2754. {"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}
  2755. {"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"}
  2756. {"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"}
  2757. {"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"}
  2758. {"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}
  2759. {"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"}
  2760. {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Elapsed":0}
  2761. {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
  2762. {"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"}
  2763. {"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"}
  2764. {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
  2765. {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
  2766. {"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"}
  2767. {"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"}
  2768. {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
  2769. {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions"}
  2770. {"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"}
  2771. {"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"}
  2772. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Elapsed":0}
  2773. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
  2774. {"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"}
  2775. {"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"}
  2776. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
  2777. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
  2778. {"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"}
  2779. {"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"}
  2780. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
  2781. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
  2782. {"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"}
  2783. {"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"}
  2784. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
  2785. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
  2786. {"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"}
  2787. {"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"}
  2788. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
  2789. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
  2790. {"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"}
  2791. {"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"}
  2792. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
  2793. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
  2794. {"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"}
  2795. {"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"}
  2796. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
  2797. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
  2798. {"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"}
  2799. {"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"}
  2800. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
  2801. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
  2802. {"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"}
  2803. {"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"}
  2804. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
  2805. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
  2806. {"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"}
  2807. {"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"}
  2808. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
  2809. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
  2810. {"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"}
  2811. {"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"}
  2812. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
  2813. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
  2814. {"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"}
  2815. {"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"}
  2816. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
  2817. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
  2818. {"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"}
  2819. {"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"}
  2820. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
  2821. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
  2822. {"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"}
  2823. {"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"}
  2824. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
  2825. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
  2826. {"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"}
  2827. {"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"}
  2828. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
  2829. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
  2830. {"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"}
  2831. {"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"}
  2832. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
  2833. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
  2834. {"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"}
  2835. {"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"}
  2836. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
  2837. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
  2838. {"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"}
  2839. {"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"}
  2840. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
  2841. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
  2842. {"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"}
  2843. {"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"}
  2844. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
  2845. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
  2846. {"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"}
  2847. {"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"}
  2848. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
  2849. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
  2850. {"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"}
  2851. {"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"}
  2852. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
  2853. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
  2854. {"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"}
  2855. {"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"}
  2856. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
  2857. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
  2858. {"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"}
  2859. {"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"}
  2860. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
  2861. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
  2862. {"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"}
  2863. {"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"}
  2864. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
  2865. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
  2866. {"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"}
  2867. {"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"}
  2868. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
  2869. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
  2870. {"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"}
  2871. {"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"}
  2872. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
  2873. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
  2874. {"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"}
  2875. {"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"}
  2876. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
  2877. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
  2878. {"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"}
  2879. {"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"}
  2880. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
  2881. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
  2882. {"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"}
  2883. {"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"}
  2884. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
  2885. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError"}
  2886. {"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"}
  2887. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil"}
  2888. {"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"}
  2889. {"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"}
  2890. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Elapsed":0}
  2891. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error"}
  2892. {"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"}
  2893. {"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"}
  2894. {"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}
  2895. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error"}
  2896. {"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"}
  2897. {"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"}
  2898. {"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}
  2899. {"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"}
  2900. {"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"}
  2901. {"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"}
  2902. {"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}
  2903. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request"}
  2904. {"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"}
  2905. {"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"}
  2906. {"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}
  2907. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error"}
  2908. {"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"}
  2909. {"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"}
  2910. {"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}
  2911. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded"}
  2912. {"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"}
  2913. {"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"}
  2914. {"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}
  2915. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF"}
  2916. {"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"}
  2917. {"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"}
  2918. {"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}
  2919. {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection"}
  2920. {"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"}
  2921. {"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"}
  2922. {"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}
  2923. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation"}
  2924. {"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"}
  2925. {"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"}
  2926. {"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}
  2927. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error"}
  2928. {"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"}
  2929. {"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"}
  2930. {"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}
  2931. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY"}
  2932. {"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"}
  2933. {"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"}
  2934. {"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}
  2935. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY"}
  2936. {"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"}
  2937. {"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"}
  2938. {"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}
  2939. {"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"}
  2940. {"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"}
  2941. {"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"}
  2942. {"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}
  2943. {"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"}
  2944. {"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"}
  2945. {"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"}
  2946. {"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}
  2947. {"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"}
  2948. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Elapsed":0}
  2949. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
  2950. {"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"}
  2951. {"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"}
  2952. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
  2953. {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough"}
  2954. {"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"}
  2955. {"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"}
  2956. {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Elapsed":0}
  2957. {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken"}
  2958. {"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"}
  2959. {"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"}
  2960. {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Elapsed":0}
  2961. {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce"}
  2962. {"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"}
  2963. {"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"}
  2964. {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Elapsed":0}
  2965. {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors"}
  2966. {"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"}
  2967. {"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"}
  2968. {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Elapsed":0}
  2969. {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion"}
  2970. {"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"}
  2971. {"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"}
  2972. {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Elapsed":0}
  2973. {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified"}
  2974. {"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"}
  2975. {"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"}
  2976. {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Elapsed":0}
  2977. {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError"}
  2978. {"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"}
  2979. {"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"}
  2980. {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Elapsed":0}
  2981. {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken"}
  2982. {"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"}
  2983. {"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"}
  2984. {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Elapsed":0}
  2985. {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream"}
  2986. {"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"}
  2987. {"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"}
  2988. {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Elapsed":0}
  2989. {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag"}
  2990. {"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"}
  2991. {"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"}
  2992. {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Elapsed":0}
  2993. {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList"}
  2994. {"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"}
  2995. {"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"}
  2996. {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Elapsed":0}
  2997. {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors"}
  2998. {"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"}
  2999. {"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"}
  3000. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Elapsed":0}
  3001. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
  3002. {"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"}
  3003. {"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"}
  3004. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
  3005. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
  3006. {"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"}
  3007. {"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"}
  3008. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
  3009. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
  3010. {"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"}
  3011. {"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"}
  3012. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
  3013. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
  3014. {"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"}
  3015. {"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"}
  3016. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
  3017. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
  3018. {"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"}
  3019. {"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"}
  3020. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
  3021. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
  3022. {"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"}
  3023. {"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"}
  3024. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
  3025. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
  3026. {"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"}
  3027. {"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"}
  3028. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
  3029. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest"}
  3030. {"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"}
  3031. {"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"}
  3032. {"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"}
  3033. {"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"}
  3034. {"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}
  3035. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged"}
  3036. {"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"}
  3037. {"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"}
  3038. {"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}
  3039. {"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"}
  3040. {"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"}
  3041. {"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"}
  3042. {"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}
  3043. {"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"}
  3044. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Elapsed":0}
  3045. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels"}
  3046. {"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"}
  3047. {"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"}
  3048. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Elapsed":0}
  3049. {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite"}
  3050. {"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"}
  3051. {"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"}
  3052. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Elapsed":0}
  3053. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
  3054. {"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"}
  3055. {"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"}
  3056. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
  3057. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged"}
  3058. {"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"}
  3059. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged"}
  3060. {"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"}
  3061. {"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"}
  3062. {"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}
  3063. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged"}
  3064. {"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"}
  3065. {"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"}
  3066. {"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}
  3067. {"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"}
  3068. {"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"}
  3069. {"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"}
  3070. {"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}
  3071. {"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"}
  3072. {"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"}
  3073. {"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"}
  3074. {"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}
  3075. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged"}
  3076. {"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"}
  3077. {"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"}
  3078. {"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}
  3079. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged"}
  3080. {"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"}
  3081. {"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"}
  3082. {"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}
  3083. {"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"}
  3084. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Elapsed":0}
  3085. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit"}
  3086. {"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"}
  3087. {"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"}
  3088. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Elapsed":0}
  3089. {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary"}
  3090. {"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"}
  3091. {"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"}
  3092. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Elapsed":0.06}
  3093. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope"}
  3094. {"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"}
  3095. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list"}
  3096. {"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"}
  3097. {"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"}
  3098. {"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}
  3099. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON"}
  3100. {"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"}
  3101. {"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"}
  3102. {"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}
  3103. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object"}
  3104. {"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"}
  3105. {"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"}
  3106. {"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}
  3107. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object"}
  3108. {"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"}
  3109. {"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"}
  3110. {"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}
  3111. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models"}
  3112. {"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"}
  3113. {"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"}
  3114. {"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}
  3115. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object"}
  3116. {"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"}
  3117. {"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"}
  3118. {"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}
  3119. {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null"}
  3120. {"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"}
  3121. {"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"}
  3122. {"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}
  3123. {"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"}
  3124. {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Elapsed":0}
  3125. {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope"}
  3126. {"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"}
  3127. {"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"}
  3128. {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Elapsed":0}
  3129. {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation"}
  3130. {"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"}
  3131. {"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"}
  3132. {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Elapsed":0.05}
  3133. {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh"}
  3134. {"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"}
  3135. {"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"}
  3136. {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Elapsed":0.05}
  3137. {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally"}
  3138. {"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"}
  3139. {"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"}
  3140. {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Elapsed":0}
  3141. {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation"}
  3142. {"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"}
  3143. {"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"}
  3144. {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Elapsed":0}
  3145. {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity"}
  3146. {"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"}
  3147. {"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"}
  3148. {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Elapsed":0}
  3149. {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize"}
  3150. {"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"}
  3151. {"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"}
  3152. {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Elapsed":0.02}
  3153. {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing"}
  3154. {"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"}
  3155. {"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"}
  3156. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Elapsed":0.01}
  3157. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag"}
  3158. {"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"}
  3159. {"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"}
  3160. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Elapsed":0}
  3161. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally"}
  3162. {"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"}
  3163. {"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"}
  3164. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Elapsed":0}
  3165. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified"}
  3166. {"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"}
  3167. {"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"}
  3168. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Elapsed":0}
  3169. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery"}
  3170. {"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"}
  3171. {"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"}
  3172. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Elapsed":0}
  3173. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment"}
  3174. {"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"}
  3175. {"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"}
  3176. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Elapsed":0}
  3177. {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable"}
  3178. {"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"}
  3179. {"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"}
  3180. {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Elapsed":0}
  3181. {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount"}
  3182. {"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"}
  3183. {"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"}
  3184. {"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"}
  3185. {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Elapsed":0}
  3186. {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount"}
  3187. {"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"}
  3188. {"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"}
  3189. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Elapsed":0}
  3190. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable"}
  3191. {"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"}
  3192. {"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"}
  3193. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Elapsed":0}
  3194. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError"}
  3195. {"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"}
  3196. {"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"}
  3197. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Elapsed":0}
  3198. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint"}
  3199. {"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"}
  3200. {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL"}
  3201. {"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"}
  3202. {"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"}
  3203. {"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}
  3204. {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host"}
  3205. {"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"}
  3206. {"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"}
  3207. {"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}
  3208. {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL"}
  3209. {"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"}
  3210. {"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"}
  3211. {"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}
  3212. {"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"}
  3213. {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Elapsed":0}
  3214. {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests"}
  3215. {"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"}
  3216. {"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"}
  3217. {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Elapsed":0}
  3218. {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground"}
  3219. {"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"}
  3220. {"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"}
  3221. {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Elapsed":0}
  3222. {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure"}
  3223. {"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"}
  3224. {"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"}
  3225. {"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"}
  3226. {"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"}
  3227. {"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}
  3228. {"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"}
  3229. {"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"}
  3230. {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/repository"}
  3231. {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"}
  3232. {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin"}
  3233. {"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"}
  3234. {"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}
  3235. {"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"}
  3236. {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Elapsed":0}
  3237. {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss"}
  3238. {"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"}
  3239. {"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"}
  3240. {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Elapsed":0}
  3241. {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering"}
  3242. {"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"}
  3243. {"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"}
  3244. {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Elapsed":0}
  3245. {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken"}
  3246. {"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"}
  3247. {"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"}
  3248. {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Elapsed":0}
  3249. {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix"}
  3250. {"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"}
  3251. {"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"}
  3252. {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Elapsed":0}
  3253. {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT"}
  3254. {"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"}
  3255. {"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"}
  3256. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Elapsed":0}
  3257. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields"}
  3258. {"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"}
  3259. {"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"}
  3260. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Elapsed":0}
  3261. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences"}
  3262. {"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"}
  3263. {"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"}
  3264. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Elapsed":0}
  3265. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate"}
  3266. {"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"}
  3267. {"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"}
  3268. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Elapsed":0}
  3269. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly"}
  3270. {"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"}
  3271. {"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"}
  3272. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Elapsed":0}
  3273. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes"}
  3274. {"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"}
  3275. {"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"}
  3276. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Elapsed":0}
  3277. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes"}
  3278. {"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"}
  3279. {"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"}
  3280. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Elapsed":0}
  3281. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers"}
  3282. {"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"}
  3283. {"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"}
  3284. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Elapsed":0}
  3285. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols"}
  3286. {"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"}
  3287. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http"}
  3288. {"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"}
  3289. {"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"}
  3290. {"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}
  3291. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse"}
  3292. {"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"}
  3293. {"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"}
  3294. {"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}
  3295. {"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"}
  3296. {"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"}
  3297. {"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"}
  3298. {"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}
  3299. {"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"}
  3300. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Elapsed":0}
  3301. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst"}
  3302. {"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"}
  3303. {"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"}
  3304. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Elapsed":0}
  3305. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn"}
  3306. {"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"}
  3307. {"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"}
  3308. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Elapsed":0}
  3309. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument"}
  3310. {"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"}
  3311. {"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"}
  3312. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Elapsed":0}
  3313. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType"}
  3314. {"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"}
  3315. {"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"}
  3316. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Elapsed":0}
  3317. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude"}
  3318. {"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"}
  3319. {"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"}
  3320. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Elapsed":0}
  3321. {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata"}
  3322. {"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"}
  3323. {"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"}
  3324. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Elapsed":0}
  3325. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware"}
  3326. {"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"}
  3327. {"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"}
  3328. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Elapsed":0}
  3329. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput"}
  3330. {"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"}
  3331. {"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"}
  3332. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Elapsed":0}
  3333. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly"}
  3334. {"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"}
  3335. {"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"}
  3336. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Elapsed":0}
  3337. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs"}
  3338. {"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"}
  3339. {"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"}
  3340. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Elapsed":0}
  3341. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly"}
  3342. {"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"}
  3343. {"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"}
  3344. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Elapsed":0}
  3345. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns"}
  3346. {"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"}
  3347. {"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"}
  3348. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Elapsed":0}
  3349. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing"}
  3350. {"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"}
  3351. {"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"}
  3352. {"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"}
  3353. {"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"}
  3354. {"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}
  3355. {"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"}
  3356. {"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"}
  3357. {"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"}
  3358. {"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}
  3359. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes"}
  3360. {"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"}
  3361. {"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"}
  3362. {"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}
  3363. {"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"}
  3364. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Elapsed":0}
  3365. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested"}
  3366. {"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"}
  3367. {"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"}
  3368. {"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"}
  3369. {"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"}
  3370. {"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}
  3371. {"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"}
  3372. {"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"}
  3373. {"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"}
  3374. {"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}
  3375. {"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"}
  3376. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Elapsed":0}
  3377. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested"}
  3378. {"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"}
  3379. {"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"}
  3380. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Elapsed":0}
  3381. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID"}
  3382. {"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"}
  3383. {"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"}
  3384. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Elapsed":0}
  3385. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID"}
  3386. {"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"}
  3387. {"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"}
  3388. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Elapsed":0}
  3389. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType"}
  3390. {"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"}
  3391. {"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"}
  3392. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Elapsed":0}
  3393. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested"}
  3394. {"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"}
  3395. {"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"}
  3396. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Elapsed":0}
  3397. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing"}
  3398. {"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"}
  3399. {"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"}
  3400. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Elapsed":0}
  3401. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID"}
  3402. {"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"}
  3403. {"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"}
  3404. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Elapsed":0}
  3405. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput"}
  3406. {"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"}
  3407. {"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"}
  3408. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Elapsed":0}
  3409. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText"}
  3410. {"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"}
  3411. {"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"}
  3412. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Elapsed":0}
  3413. {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools"}
  3414. {"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"}
  3415. {"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"}
  3416. {"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"}
  3417. {"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"}
  3418. {"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}
  3419. {"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"}
  3420. {"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"}
  3421. {"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"}
  3422. {"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}
  3423. {"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"}
  3424. {"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"}
  3425. {"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"}
  3426. {"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}
  3427. {"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"}
  3428. {"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"}
  3429. {"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"}
  3430. {"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}
  3431. {"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"}
  3432. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Elapsed":0}
  3433. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto"}
  3434. {"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"}
  3435. {"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"}
  3436. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Elapsed":0}
  3437. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences"}
  3438. {"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"}
  3439. {"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"}
  3440. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Elapsed":0}
  3441. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice"}
  3442. {"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"}
  3443. {"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"}
  3444. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Elapsed":0}
  3445. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice"}
  3446. {"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"}
  3447. {"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"}
  3448. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Elapsed":0}
  3449. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice"}
  3450. {"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"}
  3451. {"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"}
  3452. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Elapsed":0}
  3453. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice"}
  3454. {"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"}
  3455. {"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"}
  3456. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Elapsed":0}
  3457. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput"}
  3458. {"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"}
  3459. {"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"}
  3460. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Elapsed":0}
  3461. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName"}
  3462. {"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"}
  3463. {"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"}
  3464. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Elapsed":0}
  3465. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName"}
  3466. {"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"}
  3467. {"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"}
  3468. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Elapsed":0}
  3469. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID"}
  3470. {"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"}
  3471. {"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"}
  3472. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Elapsed":0}
  3473. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved"}
  3474. {"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"}
  3475. {"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"}
  3476. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Elapsed":0}
  3477. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse"}
  3478. {"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"}
  3479. {"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"}
  3480. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Elapsed":0}
  3481. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming"}
  3482. {"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"}
  3483. {"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"}
  3484. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Elapsed":0}
  3485. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs"}
  3486. {"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"}
  3487. {"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"}
  3488. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Elapsed":0}
  3489. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved"}
  3490. {"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"}
  3491. {"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"}
  3492. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Elapsed":0}
  3493. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools"}
  3494. {"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"}
  3495. {"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"}
  3496. {"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}
  3497. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields"}
  3498. {"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"}
  3499. {"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"}
  3500. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Elapsed":0}
  3501. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools"}
  3502. {"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"}
  3503. {"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"}
  3504. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Elapsed":0}
  3505. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark"}
  3506. {"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"}
  3507. {"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"}
  3508. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Elapsed":0}
  3509. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools"}
  3510. {"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"}
  3511. {"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"}
  3512. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Elapsed":0}
  3513. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool"}
  3514. {"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"}
  3515. {"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"}
  3516. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Elapsed":0}
  3517. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace"}
  3518. {"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"}
  3519. {"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"}
  3520. {"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"}
  3521. {"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"}
  3522. {"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}
  3523. {"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"}
  3524. {"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"}
  3525. {"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"}
  3526. {"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}
  3527. {"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"}
  3528. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Elapsed":0}
  3529. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools"}
  3530. {"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"}
  3531. {"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"}
  3532. {"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"}
  3533. {"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"}
  3534. {"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}
  3535. {"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"}
  3536. {"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"}
  3537. {"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"}
  3538. {"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}
  3539. {"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"}
  3540. {"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"}
  3541. {"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"}
  3542. {"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}
  3543. {"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"}
  3544. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Elapsed":0}
  3545. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce"}
  3546. {"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"}
  3547. {"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"}
  3548. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Elapsed":0}
  3549. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark"}
  3550. {"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"}
  3551. {"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"}
  3552. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Elapsed":0}
  3553. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool"}
  3554. {"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"}
  3555. {"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"}
  3556. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Elapsed":0}
  3557. {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage"}
  3558. {"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"}
  3559. {"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"}
  3560. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Elapsed":0}
  3561. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL"}
  3562. {"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"}
  3563. {"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"}
  3564. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Elapsed":0}
  3565. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly"}
  3566. {"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"}
  3567. {"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"}
  3568. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Elapsed":0}
  3569. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions"}
  3570. {"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"}
  3571. {"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"}
  3572. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Elapsed":0}
  3573. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark"}
  3574. {"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"}
  3575. {"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"}
  3576. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Elapsed":0}
  3577. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark"}
  3578. {"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"}
  3579. {"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"}
  3580. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Elapsed":0}
  3581. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias"}
  3582. {"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"}
  3583. {"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"}
  3584. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Elapsed":0}
  3585. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats"}
  3586. {"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"}
  3587. {"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"}
  3588. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Elapsed":0}
  3589. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces"}
  3590. {"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"}
  3591. {"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"}
  3592. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Elapsed":0}
  3593. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice"}
  3594. {"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"}
  3595. {"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"}
  3596. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Elapsed":0}
  3597. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark"}
  3598. {"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"}
  3599. {"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"}
  3600. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Elapsed":0}
  3601. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest"}
  3602. {"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"}
  3603. {"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"}
  3604. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Elapsed":0}
  3605. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool"}
  3606. {"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"}
  3607. {"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"}
  3608. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Elapsed":0}
  3609. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel"}
  3610. {"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"}
  3611. {"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"}
  3612. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Elapsed":0}
  3613. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput"}
  3614. {"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"}
  3615. {"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"}
  3616. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Elapsed":0}
  3617. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53"}
  3618. {"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"}
  3619. {"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"}
  3620. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Elapsed":0}
  3621. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets"}
  3622. {"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"}
  3623. {"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"}
  3624. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Elapsed":0}
  3625. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel"}
  3626. {"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"}
  3627. {"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"}
  3628. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Elapsed":0}
  3629. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite"}
  3630. {"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"}
  3631. {"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"}
  3632. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Elapsed":0}
  3633. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions"}
  3634. {"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"}
  3635. {"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"}
  3636. {"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}
  3637. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty"}
  3638. {"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"}
  3639. {"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"}
  3640. {"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}
  3641. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions"}
  3642. {"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"}
  3643. {"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"}
  3644. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Elapsed":0}
  3645. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions"}
  3646. {"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"}
  3647. {"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"}
  3648. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Elapsed":0}
  3649. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions"}
  3650. {"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"}
  3651. {"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"}
  3652. {"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}
  3653. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray"}
  3654. {"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"}
  3655. {"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"}
  3656. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Elapsed":0}
  3657. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray"}
  3658. {"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"}
  3659. {"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"}
  3660. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Elapsed":0}
  3661. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray"}
  3662. {"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"}
  3663. {"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"}
  3664. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Elapsed":0}
  3665. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField"}
  3666. {"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"}
  3667. {"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"}
  3668. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Elapsed":0}
  3669. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention"}
  3670. {"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"}
  3671. {"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"}
  3672. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Elapsed":0}
  3673. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields"}
  3674. {"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"}
  3675. {"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"}
  3676. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Elapsed":0}
  3677. {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands"}
  3678. {"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"}
  3679. {"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"}
  3680. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Elapsed":0}
  3681. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity"}
  3682. {"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"}
  3683. {"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"}
  3684. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Elapsed":0}
  3685. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity"}
  3686. {"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"}
  3687. {"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"}
  3688. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Elapsed":0}
  3689. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages"}
  3690. {"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"}
  3691. {"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"}
  3692. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Elapsed":0}
  3693. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput"}
  3694. {"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"}
  3695. {"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"}
  3696. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Elapsed":0}
  3697. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID"}
  3698. {"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"}
  3699. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true"}
  3700. {"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"}
  3701. {"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"}
  3702. {"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}
  3703. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false"}
  3704. {"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"}
  3705. {"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"}
  3706. {"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}
  3707. {"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"}
  3708. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Elapsed":0}
  3709. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary"}
  3710. {"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"}
  3711. {"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"}
  3712. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Elapsed":0}
  3713. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary"}
  3714. {"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"}
  3715. {"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"}
  3716. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Elapsed":0}
  3717. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent"}
  3718. {"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"}
  3719. {"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"}
  3720. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Elapsed":0}
  3721. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput"}
  3722. {"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"}
  3723. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true"}
  3724. {"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"}
  3725. {"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"}
  3726. {"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}
  3727. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false"}
  3728. {"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"}
  3729. {"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"}
  3730. {"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}
  3731. {"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"}
  3732. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Elapsed":0}
  3733. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed"}
  3734. {"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"}
  3735. {"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"}
  3736. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Elapsed":0}
  3737. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance"}
  3738. {"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"}
  3739. {"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"}
  3740. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Elapsed":0}
  3741. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent"}
  3742. {"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"}
  3743. {"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"}
  3744. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Elapsed":0}
  3745. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders"}
  3746. {"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"}
  3747. {"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"}
  3748. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Elapsed":0}
  3749. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState"}
  3750. {"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"}
  3751. {"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"}
  3752. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Elapsed":0}
  3753. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho"}
  3754. {"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"}
  3755. {"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"}
  3756. {"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"}
  3757. {"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"}
  3758. {"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}
  3759. {"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"}
  3760. {"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"}
  3761. {"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"}
  3762. {"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}
  3763. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough"}
  3764. {"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"}
  3765. {"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"}
  3766. {"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}
  3767. {"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"}
  3768. {"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"}
  3769. {"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"}
  3770. {"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}
  3771. {"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"}
  3772. {"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"}
  3773. {"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"}
  3774. {"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}
  3775. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop"}
  3776. {"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"}
  3777. {"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"}
  3778. {"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}
  3779. {"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"}
  3780. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Elapsed":0}
  3781. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries"}
  3782. {"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"}
  3783. {"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"}
  3784. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Elapsed":0}
  3785. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState"}
  3786. {"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"}
  3787. {"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"}
  3788. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Elapsed":0}
  3789. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded"}
  3790. {"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"}
  3791. {"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"}
  3792. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Elapsed":0}
  3793. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature"}
  3794. {"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"}
  3795. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature"}
  3796. {"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"}
  3797. {"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"}
  3798. {"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}
  3799. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged"}
  3800. {"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"}
  3801. {"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"}
  3802. {"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}
  3803. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged"}
  3804. {"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"}
  3805. {"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"}
  3806. {"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}
  3807. {"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"}
  3808. {"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"}
  3809. {"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"}
  3810. {"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}
  3811. {"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"}
  3812. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Elapsed":0}
  3813. {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures"}
  3814. {"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"}
  3815. {"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"}
  3816. {"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"}
  3817. {"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"}
  3818. {"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}
  3819. {"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"}
  3820. {"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"}
  3821. {"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"}
  3822. {"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}
  3823. {"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"}
  3824. {"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"}
  3825. {"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"}
  3826. {"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}
  3827. {"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"}
  3828. {"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"}
  3829. {"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"}
  3830. {"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}
  3831. {"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"}
  3832. {"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"}
  3833. {"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"}
  3834. {"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}
  3835. {"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"}
  3836. {"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"}
  3837. {"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"}
  3838. {"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}
  3839. {"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"}
  3840. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Elapsed":0}
  3841. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures"}
  3842. {"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"}
  3843. {"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"}
  3844. {"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"}
  3845. {"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"}
  3846. {"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"}
  3847. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Elapsed":0}
  3848. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion"}
  3849. {"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"}
  3850. {"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"}
  3851. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Elapsed":0}
  3852. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion"}
  3853. {"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"}
  3854. {"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"}
  3855. {"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"}
  3856. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Elapsed":0}
  3857. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards"}
  3858. {"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"}
  3859. {"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"}
  3860. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Elapsed":0}
  3861. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled"}
  3862. {"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"}
  3863. {"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"}
  3864. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Elapsed":0}
  3865. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault"}
  3866. {"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"}
  3867. {"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"}
  3868. {"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"}
  3869. {"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"}
  3870. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Elapsed":0}
  3871. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError"}
  3872. {"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"}
  3873. {"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"}
  3874. {"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"}
  3875. {"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"}
  3876. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Elapsed":0}
  3877. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint"}
  3878. {"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"}
  3879. {"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"}
  3880. {"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"}
  3881. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Elapsed":0}
  3882. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList"}
  3883. {"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"}
  3884. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族"}
  3885. {"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"}
  3886. {"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"}
  3887. {"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"}
  3888. {"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}
  3889. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布"}
  3890. {"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"}
  3891. {"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"}
  3892. {"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"}
  3893. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Elapsed":0}
  3894. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败"}
  3895. {"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"}
  3896. {"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"}
  3897. {"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"}
  3898. {"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"}
  3899. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Elapsed":0}
  3900. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空"}
  3901. {"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"}
  3902. {"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"}
  3903. {"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"}
  3904. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Elapsed":0}
  3905. {"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"}
  3906. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Elapsed":0}
  3907. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering"}
  3908. {"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"}
  3909. {"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"}
  3910. {"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"}
  3911. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Elapsed":0}
  3912. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies"}
  3913. {"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"}
  3914. {"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"}
  3915. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Elapsed":0}
  3916. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority"}
  3917. {"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"}
  3918. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先"}
  3919. {"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"}
  3920. {"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"}
  3921. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Elapsed":0}
  3922. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值"}
  3923. {"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"}
  3924. {"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"}
  3925. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Elapsed":0}
  3926. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量"}
  3927. {"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"}
  3928. {"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"}
  3929. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Elapsed":0}
  3930. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值"}
  3931. {"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"}
  3932. {"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"}
  3933. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Elapsed":0}
  3934. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量"}
  3935. {"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"}
  3936. {"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"}
  3937. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Elapsed":0}
  3938. {"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"}
  3939. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Elapsed":0}
  3940. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError"}
  3941. {"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"}
  3942. {"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"}
  3943. {"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"}
  3944. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Elapsed":0}
  3945. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion"}
  3946. {"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"}
  3947. {"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"}
  3948. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Elapsed":0}
  3949. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion"}
  3950. {"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"}
  3951. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本"}
  3952. {"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"}
  3953. {"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"}
  3954. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Elapsed":0}
  3955. {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留"}
  3956. {"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"}
  3957. {"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"}
  3958. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Elapsed":0}
  3959. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新"}
  3960. {"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"}
  3961. {"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"}
  3962. {"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}
  3963. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先"}
  3964. {"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"}
  3965. {"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"}
  3966. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Elapsed":0}
  3967. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回"}
  3968. {"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"}
  3969. {"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"}
  3970. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Elapsed":0}
  3971. {"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"}
  3972. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Elapsed":0}
  3973. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced"}
  3974. {"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"}
  3975. {"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"}
  3976. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Elapsed":0}
  3977. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing"}
  3978. {"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"}
  3979. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期"}
  3980. {"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"}
  3981. {"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"}
  3982. {"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"}
  3983. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Elapsed":0}
  3984. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值"}
  3985. {"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"}
  3986. {"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"}
  3987. {"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"}
  3988. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Elapsed":0}
  3989. {"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"}
  3990. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Elapsed":0}
  3991. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical"}
  3992. {"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"}
  3993. {"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"}
  3994. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Elapsed":0}
  3995. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact"}
  3996. {"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"}
  3997. {"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"}
  3998. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Elapsed":0}
  3999. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext"}
  4000. {"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"}
  4001. {"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"}
  4002. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Elapsed":0}
  4003. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping"}
  4004. {"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"}
  4005. {"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"}
  4006. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Elapsed":0}
  4007. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest"}
  4008. {"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"}
  4009. {"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"}
  4010. {"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"}
  4011. {"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"}
  4012. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Elapsed":0}
  4013. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard"}
  4014. {"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"}
  4015. {"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"}
  4016. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Elapsed":0}
  4017. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure"}
  4018. {"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"}
  4019. {"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"}
  4020. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Elapsed":0}
  4021. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage"}
  4022. {"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"}
  4023. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model"}
  4024. {"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"}
  4025. {"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"}
  4026. {"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}
  4027. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model"}
  4028. {"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"}
  4029. {"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"}
  4030. {"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}
  4031. {"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"}
  4032. {"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"}
  4033. {"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"}
  4034. {"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}
  4035. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature"}
  4036. {"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"}
  4037. {"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"}
  4038. {"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}
  4039. {"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"}
  4040. {"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"}
  4041. {"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"}
  4042. {"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}
  4043. {"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"}
  4044. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Elapsed":0}
  4045. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel"}
  4046. {"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"}
  4047. {"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"}
  4048. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Elapsed":0}
  4049. {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce"}
  4050. {"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"}
  4051. {"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"}
  4052. {"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"}
  4053. {"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"}
  4054. {"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"}
  4055. {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Elapsed":0}
  4056. {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy"}
  4057. {"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"}
  4058. {"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"}
  4059. {"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"}
  4060. {"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"}
  4061. {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Elapsed":0}
  4062. {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy"}
  4063. {"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"}
  4064. {"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"}
  4065. {"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"}
  4066. {"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"}
  4067. {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Elapsed":0}
  4068. {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput"}
  4069. {"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"}
  4070. {"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"}
  4071. {"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"}
  4072. {"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"}
  4073. {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Elapsed":0}
  4074. {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput"}
  4075. {"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"}
  4076. {"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"}
  4077. {"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"}
  4078. {"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"}
  4079. {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Elapsed":0}
  4080. {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails"}
  4081. {"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"}
  4082. {"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"}
  4083. {"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"}
  4084. {"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"}
  4085. {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Elapsed":0}
  4086. {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath"}
  4087. {"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"}
  4088. {"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"}
  4089. {"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"}
  4090. {"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"}
  4091. {"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"}
  4092. {"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"}
  4093. {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Elapsed":0}
  4094. {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel"}
  4095. {"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"}
  4096. {"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"}
  4097. {"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"}
  4098. {"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"}
  4099. {"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"}
  4100. {"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}
  4101. {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped"}
  4102. {"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"}
  4103. {"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"}
  4104. {"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"}
  4105. {"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}
  4106. {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup"}
  4107. {"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"}
  4108. {"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"}
  4109. {"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"}
  4110. {"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}
  4111. {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping"}
  4112. {"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"}
  4113. {"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"}
  4114. {"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"}
  4115. {"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}
  4116. {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel"}
  4117. {"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"}
  4118. {"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"}
  4119. {"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"}
  4120. {"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"}
  4121. {"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}
  4122. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported"}
  4123. {"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"}
  4124. {"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"}
  4125. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Elapsed":0}
  4126. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported"}
  4127. {"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"}
  4128. {"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"}
  4129. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Elapsed":0}
  4130. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported"}
  4131. {"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"}
  4132. {"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"}
  4133. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Elapsed":0}
  4134. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported"}
  4135. {"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"}
  4136. {"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"}
  4137. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Elapsed":0}
  4138. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus"}
  4139. {"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"}
  4140. {"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"}
  4141. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Elapsed":0}
  4142. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported"}
  4143. {"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"}
  4144. {"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"}
  4145. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Elapsed":0}
  4146. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus"}
  4147. {"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"}
  4148. {"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"}
  4149. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Elapsed":0}
  4150. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported"}
  4151. {"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"}
  4152. {"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"}
  4153. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Elapsed":0}
  4154. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape"}
  4155. {"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"}
  4156. {"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"}
  4157. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Elapsed":0}
  4158. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem"}
  4159. {"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"}
  4160. {"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"}
  4161. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Elapsed":0}
  4162. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput"}
  4163. {"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"}
  4164. {"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"}
  4165. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Elapsed":0}
  4166. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier"}
  4167. {"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"}
  4168. {"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"}
  4169. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Elapsed":0}
  4170. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint"}
  4171. {"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"}
  4172. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary"}
  4173. {"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"}
  4174. {"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"}
  4175. {"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"}
  4176. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Elapsed":0}
  4177. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough"}
  4178. {"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"}
  4179. {"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"}
  4180. {"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"}
  4181. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Elapsed":0}
  4182. {"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"}
  4183. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Elapsed":0}
  4184. {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled"}
  4185. {"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"}
  4186. {"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"}
  4187. {"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}
  4188. {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments"}
  4189. {"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"}
  4190. {"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"}
  4191. {"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}
  4192. {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched"}
  4193. {"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"}
  4194. {"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"}
  4195. {"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"}
  4196. {"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"}
  4197. {"Time":"2026-09-12T11:38:29.9786934+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Elapsed":0.766}
  4198. {"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"}
  4199. {"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}
  4200. {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive"}
  4201. {"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"}
  4202. {"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"}
  4203. {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Elapsed":0}
  4204. {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents"}
  4205. {"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"}
  4206. {"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"}
  4207. {"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}
  4208. {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent"}
  4209. {"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"}
  4210. {"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"}
  4211. {"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}
  4212. {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath"}
  4213. {"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"}
  4214. {"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"}
  4215. {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Elapsed":0}
  4216. {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats"}
  4217. {"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"}
  4218. {"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"}
  4219. {"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}
  4220. {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic"}
  4221. {"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"}
  4222. {"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"}
  4223. {"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}
  4224. {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic"}
  4225. {"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"}
  4226. {"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"}
  4227. {"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}
  4228. {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady"}
  4229. {"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"}
  4230. {"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"}
  4231. {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Elapsed":0}
  4232. {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit"}
  4233. {"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"}
  4234. {"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"}
  4235. {"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}
  4236. {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes"}
  4237. {"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"}
  4238. {"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"}
  4239. {"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}
  4240. {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes"}
  4241. {"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"}
  4242. {"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"}
  4243. {"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}
  4244. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit"}
  4245. {"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"}
  4246. {"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"}
  4247. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Elapsed":0}
  4248. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted"}
  4249. {"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"}
  4250. {"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"}
  4251. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Elapsed":0}
  4252. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID"}
  4253. {"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"}
  4254. {"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"}
  4255. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Elapsed":0}
  4256. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage"}
  4257. {"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"}
  4258. {"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"}
  4259. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Elapsed":0}
  4260. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage"}
  4261. {"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"}
  4262. {"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"}
  4263. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Elapsed":0}
  4264. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject"}
  4265. {"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"}
  4266. {"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"}
  4267. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Elapsed":0}
  4268. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus"}
  4269. {"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"}
  4270. {"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"}
  4271. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Elapsed":0}
  4272. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"}
  4273. {"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"}
  4274. {"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"}
  4275. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"}
  4276. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"}
  4277. {"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"}
  4278. {"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"}
  4279. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"}
  4280. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
  4281. {"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"}
  4282. {"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"}
  4283. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
  4284. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
  4285. {"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"}
  4286. {"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"}
  4287. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
  4288. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"}
  4289. {"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"}
  4290. {"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"}
  4291. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"}
  4292. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
  4293. {"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"}
  4294. {"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"}
  4295. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
  4296. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders"}
  4297. {"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"}
  4298. {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份"}
  4299. {"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"}
  4300. {"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"}
  4301. {"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"}
  4302. {"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"}
  4303. {"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"}
  4304. {"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}
  4305. {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份"}
  4306. {"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"}
  4307. {"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"}
  4308. {"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"}
  4309. {"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"}
  4310. {"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"}
  4311. {"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}
  4312. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA"}
  4313. {"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"}
  4314. {"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"}
  4315. {"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"}
  4316. {"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"}
  4317. {"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"}
  4318. {"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}
  4319. {"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"}
  4320. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Elapsed":0}
  4321. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
  4322. {"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"}
  4323. {"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"}
  4324. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
  4325. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
  4326. {"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"}
  4327. {"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"}
  4328. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
  4329. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs"}
  4330. {"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"}
  4331. {"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"}
  4332. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Elapsed":0}
  4333. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly"}
  4334. {"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"}
  4335. {"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"}
  4336. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Elapsed":0}
  4337. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns"}
  4338. {"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"}
  4339. {"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"}
  4340. {"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}
  4341. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages"}
  4342. {"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"}
  4343. {"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"}
  4344. {"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}
  4345. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix"}
  4346. {"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"}
  4347. {"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"}
  4348. {"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}
  4349. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers"}
  4350. {"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"}
  4351. {"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"}
  4352. {"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}
  4353. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers"}
  4354. {"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"}
  4355. {"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"}
  4356. {"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}
  4357. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers"}
  4358. {"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"}
  4359. {"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"}
  4360. {"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}
  4361. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools"}
  4362. {"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"}
  4363. {"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"}
  4364. {"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}
  4365. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions"}
  4366. {"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"}
  4367. {"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"}
  4368. {"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}
  4369. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole"}
  4370. {"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"}
  4371. {"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"}
  4372. {"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}
  4373. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent"}
  4374. {"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"}
  4375. {"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"}
  4376. {"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}
  4377. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString"}
  4378. {"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"}
  4379. {"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"}
  4380. {"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}
  4381. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray"}
  4382. {"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"}
  4383. {"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"}
  4384. {"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}
  4385. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions"}
  4386. {"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"}
  4387. {"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"}
  4388. {"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}
  4389. {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic"}
  4390. {"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"}
  4391. {"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"}
  4392. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Elapsed":0}
  4393. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent"}
  4394. {"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"}
  4395. {"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"}
  4396. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Elapsed":0}
  4397. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored"}
  4398. {"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"}
  4399. {"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"}
  4400. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Elapsed":0}
  4401. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput"}
  4402. {"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"}
  4403. {"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"}
  4404. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Elapsed":0}
  4405. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation"}
  4406. {"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"}
  4407. {"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"}
  4408. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Elapsed":0}
  4409. {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes"}
  4410. {"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"}
  4411. {"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"}
  4412. {"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"}
  4413. {"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"}
  4414. {"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}
  4415. {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses"}
  4416. {"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"}
  4417. {"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"}
  4418. {"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}
  4419. {"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"}
  4420. {"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"}
  4421. {"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"}
  4422. {"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}
  4423. {"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"}
  4424. {"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"}
  4425. {"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"}
  4426. {"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}
  4427. {"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"}
  4428. {"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"}
  4429. {"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"}
  4430. {"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}
  4431. {"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"}
  4432. {"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"}
  4433. {"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"}
  4434. {"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}
  4435. {"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"}
  4436. {"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"}
  4437. {"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"}
  4438. {"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}
  4439. {"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"}
  4440. {"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"}
  4441. {"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"}
  4442. {"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}
  4443. {"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"}
  4444. {"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"}
  4445. {"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"}
  4446. {"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}
  4447. {"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"}
  4448. {"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"}
  4449. {"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"}
  4450. {"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}
  4451. {"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"}
  4452. {"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"}
  4453. {"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"}
  4454. {"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}
  4455. {"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"}
  4456. {"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"}
  4457. {"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"}
  4458. {"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}
  4459. {"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"}
  4460. {"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"}
  4461. {"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"}
  4462. {"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}
  4463. {"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"}
  4464. {"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"}
  4465. {"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"}
  4466. {"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}
  4467. {"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"}
  4468. {"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"}
  4469. {"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"}
  4470. {"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}
  4471. {"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"}
  4472. {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Elapsed":0}
  4473. {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes"}
  4474. {"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"}
  4475. {"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"}
  4476. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Elapsed":0}
  4477. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem"}
  4478. {"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"}
  4479. {"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"}
  4480. {"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}
  4481. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem"}
  4482. {"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"}
  4483. {"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"}
  4484. {"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}
  4485. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent"}
  4486. {"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"}
  4487. {"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"}
  4488. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Elapsed":0}
  4489. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields"}
  4490. {"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"}
  4491. {"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"}
  4492. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Elapsed":0}
  4493. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper"}
  4494. {"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"}
  4495. {"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"}
  4496. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Elapsed":0}
  4497. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles"}
  4498. {"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"}
  4499. {"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"}
  4500. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Elapsed":0}
  4501. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters"}
  4502. {"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"}
  4503. {"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"}
  4504. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Elapsed":0}
  4505. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor"}
  4506. {"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"}
  4507. {"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"}
  4508. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Elapsed":0}
  4509. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix"}
  4510. {"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"}
  4511. {"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"}
  4512. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Elapsed":0}
  4513. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy"}
  4514. {"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"}
  4515. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error"}
  4516. {"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"}
  4517. {"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"}
  4518. {"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}
  4519. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped"}
  4520. {"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"}
  4521. {"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"}
  4522. {"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}
  4523. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive"}
  4524. {"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"}
  4525. {"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"}
  4526. {"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}
  4527. {"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"}
  4528. {"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"}
  4529. {"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"}
  4530. {"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}
  4531. {"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"}
  4532. {"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"}
  4533. {"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"}
  4534. {"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}
  4535. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty"}
  4536. {"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"}
  4537. {"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"}
  4538. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Elapsed":0}
  4539. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error"}
  4540. {"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"}
  4541. {"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"}
  4542. {"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}
  4543. {"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"}
  4544. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Elapsed":0}
  4545. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"}
  4546. {"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"}
  4547. {"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"}
  4548. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"}
  4549. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"}
  4550. {"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"}
  4551. {"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"}
  4552. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"}
  4553. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"}
  4554. {"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"}
  4555. {"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"}
  4556. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"}
  4557. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"}
  4558. {"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"}
  4559. {"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"}
  4560. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"}
  4561. {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"}
  4562. {"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"}
  4563. {"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"}
  4564. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"}
  4565. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"}
  4566. {"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"}
  4567. {"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"}
  4568. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"}
  4569. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents"}
  4570. {"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"}
  4571. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root"}
  4572. {"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"}
  4573. {"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"}
  4574. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Elapsed":0}
  4575. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1"}
  4576. {"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"}
  4577. {"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"}
  4578. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Elapsed":0}
  4579. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix"}
  4580. {"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"}
  4581. {"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"}
  4582. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Elapsed":0}
  4583. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version"}
  4584. {"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"}
  4585. {"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"}
  4586. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Elapsed":0}
  4587. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query"}
  4588. {"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"}
  4589. {"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"}
  4590. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Elapsed":0}
  4591. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed"}
  4592. {"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"}
  4593. {"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"}
  4594. {"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}
  4595. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6"}
  4596. {"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"}
  4597. {"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"}
  4598. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Elapsed":0}
  4599. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete"}
  4600. {"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"}
  4601. {"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"}
  4602. {"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}
  4603. {"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"}
  4604. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Elapsed":0}
  4605. {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount"}
  4606. {"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"}
  4607. {"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"}
  4608. {"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"}
  4609. {"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"}
  4610. {"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"}
  4611. {"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"}
  4612. {"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"}
  4613. {"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"}
  4614. {"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}
  4615. {"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"}
  4616. {"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"}
  4617. {"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"}
  4618. {"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"}
  4619. {"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"}
  4620. {"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"}
  4621. {"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"}
  4622. {"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}
  4623. {"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"}
  4624. {"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"}
  4625. {"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"}
  4626. {"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"}
  4627. {"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"}
  4628. {"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"}
  4629. {"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}
  4630. {"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"}
  4631. {"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"}
  4632. {"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"}
  4633. {"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"}
  4634. {"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"}
  4635. {"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"}
  4636. {"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"}
  4637. {"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}
  4638. {"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"}
  4639. {"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}
  4640. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody"}
  4641. {"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"}
  4642. {"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"}
  4643. {"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}
  4644. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache"}
  4645. {"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"}
  4646. {"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"}
  4647. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Elapsed":0}
  4648. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers"}
  4649. {"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"}
  4650. {"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"}
  4651. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Elapsed":0}
  4652. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage"}
  4653. {"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"}
  4654. {"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"}
  4655. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Elapsed":0}
  4656. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth"}
  4657. {"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"}
  4658. {"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"}
  4659. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Elapsed":0}
  4660. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule"}
  4661. {"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"}
  4662. {"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"}
  4663. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Elapsed":0}
  4664. {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast"}
  4665. {"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"}
  4666. {"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"}
  4667. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Elapsed":0}
  4668. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField"}
  4669. {"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"}
  4670. {"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"}
  4671. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Elapsed":0}
  4672. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule"}
  4673. {"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"}
  4674. {"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"}
  4675. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Elapsed":0}
  4676. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast"}
  4677. {"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"}
  4678. {"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"}
  4679. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Elapsed":0}
  4680. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier"}
  4681. {"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"}
  4682. {"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"}
  4683. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Elapsed":0}
  4684. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier"}
  4685. {"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"}
  4686. {"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"}
  4687. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Elapsed":0}
  4688. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy"}
  4689. {"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"}
  4690. {"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"}
  4691. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Elapsed":0}
  4692. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup"}
  4693. {"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"}
  4694. {"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"}
  4695. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Elapsed":0}
  4696. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts"}
  4697. {"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"}
  4698. {"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"}
  4699. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Elapsed":0}
  4700. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform"}
  4701. {"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"}
  4702. {"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"}
  4703. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Elapsed":0}
  4704. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule"}
  4705. {"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"}
  4706. {"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"}
  4707. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Elapsed":0}
  4708. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers"}
  4709. {"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"}
  4710. {"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"}
  4711. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Elapsed":0}
  4712. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped"}
  4713. {"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"}
  4714. {"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"}
  4715. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Elapsed":0}
  4716. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError"}
  4717. {"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"}
  4718. {"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"}
  4719. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Elapsed":0}
  4720. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation"}
  4721. {"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"}
  4722. {"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"}
  4723. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Elapsed":0}
  4724. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode"}
  4725. {"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"}
  4726. {"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"}
  4727. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Elapsed":0}
  4728. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe"}
  4729. {"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"}
  4730. {"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"}
  4731. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Elapsed":0}
  4732. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping"}
  4733. {"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"}
  4734. {"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"}
  4735. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Elapsed":0}
  4736. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream"}
  4737. {"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"}
  4738. {"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"}
  4739. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Elapsed":0}
  4740. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault"}
  4741. {"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"}
  4742. {"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"}
  4743. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Elapsed":0}
  4744. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias"}
  4745. {"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"}
  4746. {"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"}
  4747. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Elapsed":0}
  4748. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier"}
  4749. {"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"}
  4750. {"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"}
  4751. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Elapsed":0}
  4752. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"}
  4753. {"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"}
  4754. {"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"}
  4755. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"}
  4756. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"}
  4757. {"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"}
  4758. {"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"}
  4759. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"}
  4760. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"}
  4761. {"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"}
  4762. {"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"}
  4763. {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"}
  4764. {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"}
  4765. {"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"}
  4766. {"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"}
  4767. {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"}
  4768. {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"}
  4769. {"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"}
  4770. {"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"}
  4771. {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"}
  4772. {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait"}
  4773. {"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"}
  4774. {"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"}
  4775. {"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"}
  4776. {"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"}
  4777. {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Elapsed":1}
  4778. {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream"}
  4779. {"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"}
  4780. {"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"}
  4781. {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Elapsed":0}
  4782. {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader"}
  4783. {"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"}
  4784. {"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"}
  4785. {"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"}
  4786. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Elapsed":0.2}
  4787. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution"}
  4788. {"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"}
  4789. {"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"}
  4790. {"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"}
  4791. {"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"}
  4792. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Elapsed":0}
  4793. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort"}
  4794. {"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"}
  4795. {"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"}
  4796. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Elapsed":0}
  4797. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit"}
  4798. {"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"}
  4799. {"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"}
  4800. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Elapsed":0}
  4801. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams"}
  4802. {"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"}
  4803. {"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"}
  4804. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Elapsed":0}
  4805. {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive"}
  4806. {"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"}
  4807. {"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"}
  4808. {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Elapsed":0}
  4809. {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool"}
  4810. {"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"}
  4811. {"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"}
  4812. {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Elapsed":0}
  4813. {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp"}
  4814. {"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"}
  4815. {"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"}
  4816. {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Elapsed":0}
  4817. {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup"}
  4818. {"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"}
  4819. {"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"}
  4820. {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Elapsed":0}
  4821. {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput"}
  4822. {"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"}
  4823. {"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"}
  4824. {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Elapsed":1.1}
  4825. {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent"}
  4826. {"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"}
  4827. {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL"}
  4828. {"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"}
  4829. {"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"}
  4830. {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Elapsed":0}
  4831. {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling"}
  4832. {"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"}
  4833. {"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"}
  4834. {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Elapsed":0}
  4835. {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails"}
  4836. {"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"}
  4837. {"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"}
  4838. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Elapsed":0}
  4839. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails"}
  4840. {"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"}
  4841. {"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"}
  4842. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Elapsed":0}
  4843. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant"}
  4844. {"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"}
  4845. {"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"}
  4846. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Elapsed":0}
  4847. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange"}
  4848. {"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"}
  4849. {"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"}
  4850. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Elapsed":0}
  4851. {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile"}
  4852. {"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"}
  4853. {"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"}
  4854. {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Elapsed":0}
  4855. {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello"}
  4856. {"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"}
  4857. {"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"}
  4858. {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Elapsed":0}
  4859. {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL"}
  4860. {"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"}
  4861. {"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"}
  4862. {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Elapsed":0}
  4863. {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite"}
  4864. {"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"}
  4865. {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel"}
  4866. {"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"}
  4867. {"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"}
  4868. {"Time":"2026-09-12T11:38:33.7711578+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Elapsed":0}
  4869. {"Time":"2026-09-12T11:38:33.7716688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI"}
  4870. {"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"}
  4871. {"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"}
  4872. {"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}
  4873. {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint"}
  4874. {"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"}
  4875. {"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"}
  4876. {"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}
  4877. {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON"}
  4878. {"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"}
  4879. {"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"}
  4880. {"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}
  4881. {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID"}
  4882. {"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"}
  4883. {"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"}
  4884. {"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}
  4885. {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI"}
  4886. {"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"}
  4887. {"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"}
  4888. {"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}
  4889. {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody"}
  4890. {"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"}
  4891. {"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"}
  4892. {"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}
  4893. {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID"}
  4894. {"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"}
  4895. {"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"}
  4896. {"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}
  4897. {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields"}
  4898. {"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"}
  4899. {"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"}
  4900. {"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}
  4901. {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus"}
  4902. {"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"}
  4903. {"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"}
  4904. {"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}
  4905. {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID"}
  4906. {"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"}
  4907. {"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"}
  4908. {"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}
  4909. {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer"}
  4910. {"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"}
  4911. {"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"}
  4912. {"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}
  4913. {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery"}
  4914. {"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"}
  4915. {"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"}
  4916. {"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}
  4917. {"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"}
  4918. {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Elapsed":0.01}
  4919. {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode"}
  4920. {"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"}
  4921. {"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"}
  4922. {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Elapsed":0}
  4923. {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode"}
  4924. {"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"}
  4925. {"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"}
  4926. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Elapsed":0}
  4927. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult"}
  4928. {"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"}
  4929. {"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"}
  4930. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Elapsed":0}
  4931. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds"}
  4932. {"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"}
  4933. {"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"}
  4934. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Elapsed":0}
  4935. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity"}
  4936. {"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"}
  4937. {"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"}
  4938. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Elapsed":0}
  4939. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy"}
  4940. {"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"}
  4941. {"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"}
  4942. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Elapsed":0}
  4943. {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease"}
  4944. {"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"}
  4945. {"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"}
  4946. {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Elapsed":0}
  4947. {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow"}
  4948. {"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"}
  4949. {"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"}
  4950. {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Elapsed":0}
  4951. {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow"}
  4952. {"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"}
  4953. {"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"}
  4954. {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Elapsed":0}
  4955. {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"PASS\n","OutputType":"frame"}
  4956. {"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"}
  4957. {"Time":"2026-09-12T11:38:33.7858321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Elapsed":4.573}
  4958. {"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"}
  4959. {"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"}
  4960. {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Elapsed":1}
  4961. {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent"}
  4962. {"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"}
  4963. {"Time":"2026-09-12T11:38:34.9361377+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON"}
  4964. {"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"}
  4965. {"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"}
  4966. {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Elapsed":0}
  4967. {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly"}
  4968. {"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"}
  4969. {"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"}
  4970. {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Elapsed":0}
  4971. {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser"}
  4972. {"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"}
  4973. {"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"}
  4974. {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Elapsed":0}
  4975. {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate"}
  4976. {"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"}
  4977. {"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"}
  4978. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Elapsed":0}
  4979. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam"}
  4980. {"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"}
  4981. {"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"}
  4982. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Elapsed":0}
  4983. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry"}
  4984. {"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"}
  4985. {"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"}
  4986. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Elapsed":0}
  4987. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray"}
  4988. {"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"}
  4989. {"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"}
  4990. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Elapsed":0}
  4991. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken"}
  4992. {"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"}
  4993. {"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"}
  4994. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Elapsed":0}
  4995. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken"}
  4996. {"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"}
  4997. {"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"}
  4998. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Elapsed":0}
  4999. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken"}
  5000. {"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"}
  5001. {"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"}
  5002. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Elapsed":0}
  5003. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken"}
  5004. {"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"}
  5005. {"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"}
  5006. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Elapsed":0}
  5007. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken"}
  5008. {"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"}
  5009. {"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"}
  5010. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Elapsed":0}
  5011. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry"}
  5012. {"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"}
  5013. {"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"}
  5014. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Elapsed":0}
  5015. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry"}
  5016. {"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"}
  5017. {"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"}
  5018. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Elapsed":0}
  5019. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry"}
  5020. {"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"}
  5021. {"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"}
  5022. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Elapsed":0}
  5023. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers"}
  5024. {"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"}
  5025. {"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"}
  5026. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Elapsed":0}
  5027. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount"}
  5028. {"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"}
  5029. {"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"}
  5030. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Elapsed":0}
  5031. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing"}
  5032. {"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"}
  5033. {"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"}
  5034. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Elapsed":0}
  5035. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint"}
  5036. {"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"}
  5037. {"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"}
  5038. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Elapsed":0}
  5039. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey"}
  5040. {"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"}
  5041. {"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"}
  5042. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Elapsed":0}
  5043. {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount"}
  5044. {"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"}
  5045. {"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"}
  5046. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Elapsed":0}
  5047. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys"}
  5048. {"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"}
  5049. {"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"}
  5050. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Elapsed":0}
  5051. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder"}
  5052. {"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"}
  5053. {"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"}
  5054. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Elapsed":0}
  5055. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers"}
  5056. {"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"}
  5057. {"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"}
  5058. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Elapsed":0}
  5059. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity"}
  5060. {"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"}
  5061. {"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"}
  5062. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Elapsed":0}
  5063. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts"}
  5064. {"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"}
  5065. {"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"}
  5066. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Elapsed":0}
  5067. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts"}
  5068. {"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"}
  5069. {"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"}
  5070. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Elapsed":0}
  5071. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting"}
  5072. {"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"}
  5073. {"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"}
  5074. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Elapsed":0}
  5075. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken"}
  5076. {"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"}
  5077. {"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"}
  5078. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Elapsed":0}
  5079. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken"}
  5080. {"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"}
  5081. {"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"}
  5082. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Elapsed":0}
  5083. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken"}
  5084. {"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"}
  5085. {"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"}
  5086. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Elapsed":0}
  5087. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup"}
  5088. {"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"}
  5089. {"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"}
  5090. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Elapsed":0}
  5091. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping"}
  5092. {"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"}
  5093. {"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"}
  5094. {"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}
  5095. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults"}
  5096. {"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"}
  5097. {"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"}
  5098. {"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}
  5099. {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol"}
  5100. {"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"}
  5101. {"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"}
  5102. {"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}
  5103. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels"}
  5104. {"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"}
  5105. {"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"}
  5106. {"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}
  5107. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue"}
  5108. {"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"}
  5109. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create"}
  5110. {"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"}
  5111. {"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"}
  5112. {"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}
  5113. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update"}
  5114. {"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"}
  5115. {"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"}
  5116. {"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}
  5117. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update"}
  5118. {"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"}
  5119. {"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"}
  5120. {"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}
  5121. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create"}
  5122. {"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"}
  5123. {"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"}
  5124. {"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}
  5125. {"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"}
  5126. {"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"}
  5127. {"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"}
  5128. {"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}
  5129. {"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"}
  5130. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Elapsed":0}
  5131. {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms"}
  5132. {"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"}
  5133. {"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"}
  5134. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Elapsed":0}
  5135. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation"}
  5136. {"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"}
  5137. {"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"}
  5138. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Elapsed":0}
  5139. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation"}
  5140. {"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"}
  5141. {"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"}
  5142. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Elapsed":0}
  5143. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration"}
  5144. {"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"}
  5145. {"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"}
  5146. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Elapsed":0}
  5147. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults"}
  5148. {"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"}
  5149. {"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"}
  5150. {"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}
  5151. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN"}
  5152. {"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"}
  5153. {"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"}
  5154. {"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}
  5155. {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams"}
  5156. {"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"}
  5157. {"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"}
  5158. {"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}
  5159. {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier"}
  5160. {"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"}
  5161. {"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"}
  5162. {"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"}
  5163. {"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"}
  5164. {"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}
  5165. {"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'"}
  5166. {"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"}
  5167. {"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"}
  5168. {"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}
  5169. {"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'"}
  5170. {"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"}
  5171. {"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"}
  5172. {"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}
  5173. {"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"}
  5174. {"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"}
  5175. {"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"}
  5176. {"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}
  5177. {"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)"}
  5178. {"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"}
  5179. {"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"}
  5180. {"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}
  5181. {"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"}
  5182. {"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}
  5183. {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast"}
  5184. {"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"}
  5185. {"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"}
  5186. {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Elapsed":0}
  5187. {"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"}
  5188. {"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"}
  5189. {"Time":"2026-09-12T11:38:34.9437934+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Elapsed":5.731}
  5190. {"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"}
  5191. {"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"}
  5192. {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Elapsed":1}
  5193. {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine"}
  5194. {"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"}
  5195. {"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"}
  5196. {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Elapsed":0}
  5197. {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes"}
  5198. {"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"}
  5199. {"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"}
  5200. {"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"}
  5201. {"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"}
  5202. {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Elapsed":0.07}
  5203. {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak"}
  5204. {"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"}
  5205. {"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"}
  5206. {"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"}
  5207. {"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"}
  5208. {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Elapsed":0.01}
  5209. {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary"}
  5210. {"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"}
  5211. {"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"}
  5212. {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Elapsed":0.12}
  5213. {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive"}
  5214. {"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"}
  5215. {"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"}
  5216. {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Elapsed":2.1}
  5217. {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit"}
  5218. {"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"}
  5219. {"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"}
  5220. {"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"}
  5221. {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Elapsed":2}
  5222. {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage"}
  5223. {"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"}
  5224. {"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"}
  5225. {"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"}
  5226. {"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"}
  5227. {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Elapsed":0}
  5228. {"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"}
  5229. {"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"}
  5230. {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens"}
  5231. {"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"}
  5232. {"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"}
  5233. {"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"}
  5234. {"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}
  5235. {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported"}
  5236. {"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"}
  5237. {"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"}
  5238. {"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"}
  5239. {"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"}
  5240. {"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"}
  5241. {"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"}
  5242. {"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}
  5243. {"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"}
  5244. {"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"}
  5245. {"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"}
  5246. {"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"}
  5247. {"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"}
  5248. {"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}
  5249. {"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"}
  5250. {"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"}
  5251. {"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"}
  5252. {"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"}
  5253. {"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"}
  5254. {"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}
  5255. {"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"}
  5256. {"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"}
  5257. {"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"}
  5258. {"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"}
  5259. {"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"}
  5260. {"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}
  5261. {"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"}
  5262. {"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}
  5263. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails"}
  5264. {"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"}
  5265. {"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"}
  5266. {"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"}
  5267. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Elapsed":0}
  5268. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples"}
  5269. {"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"}
  5270. {"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"}
  5271. {"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"}
  5272. {"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"}
  5273. {"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}
  5274. {"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"}
  5275. {"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"}
  5276. {"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"}
  5277. {"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}
  5278. {"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"}
  5279. {"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"}
  5280. {"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"}
  5281. {"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}
  5282. {"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"}
  5283. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Elapsed":0}
  5284. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel"}
  5285. {"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"}
  5286. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5"}
  5287. {"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"}
  5288. {"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"}
  5289. {"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}
  5290. {"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"}
  5291. {"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"}
  5292. {"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"}
  5293. {"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}
  5294. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini"}
  5295. {"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"}
  5296. {"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"}
  5297. {"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}
  5298. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1"}
  5299. {"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"}
  5300. {"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"}
  5301. {"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}
  5302. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo"}
  5303. {"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"}
  5304. {"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"}
  5305. {"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}
  5306. {"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"}
  5307. {"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"}
  5308. {"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"}
  5309. {"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}
  5310. {"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"}
  5311. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Elapsed":0}
  5312. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI"}
  5313. {"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"}
  5314. {"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"}
  5315. {"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"}
  5316. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"skip","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Elapsed":0}
  5317. {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries"}
  5318. {"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"}
  5319. {"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"}
  5320. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Elapsed":0}
  5321. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary"}
  5322. {"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"}
  5323. {"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"}
  5324. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Elapsed":0}
  5325. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine"}
  5326. {"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"}
  5327. {"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"}
  5328. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Elapsed":0}
  5329. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush"}
  5330. {"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"}
  5331. {"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"}
  5332. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Elapsed":0}
  5333. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary"}
  5334. {"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"}
  5335. {"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"}
  5336. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Elapsed":0}
  5337. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone"}
  5338. {"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"}
  5339. {"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"}
  5340. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Elapsed":0}
  5341. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage"}
  5342. {"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"}
  5343. {"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"}
  5344. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Elapsed":0}
  5345. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage"}
  5346. {"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"}
  5347. {"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"}
  5348. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Elapsed":0}
  5349. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage"}
  5350. {"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"}
  5351. {"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"}
  5352. {"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"}
  5353. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Elapsed":0}
  5354. {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual"}
  5355. {"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"}
  5356. {"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"}
  5357. {"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"}
  5358. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Elapsed":0}
  5359. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce"}
  5360. {"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"}
  5361. {"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"}
  5362. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Elapsed":0}
  5363. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage"}
  5364. {"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"}
  5365. {"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"}
  5366. {"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"}
  5367. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Elapsed":0}
  5368. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling"}
  5369. {"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"}
  5370. {"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"}
  5371. {"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"}
  5372. {"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"}
  5373. {"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}
  5374. {"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"}
  5375. {"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"}
  5376. {"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"}
  5377. {"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"}
  5378. {"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"}
  5379. {"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}
  5380. {"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"}
  5381. {"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}
  5382. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput"}
  5383. {"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"}
  5384. {"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"}
  5385. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Elapsed":0}
  5386. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog"}
  5387. {"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"}
  5388. {"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"}
  5389. {"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"}
  5390. {"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"}
  5391. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Elapsed":0}
  5392. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog"}
  5393. {"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"}
  5394. {"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"}
  5395. {"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"}
  5396. {"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"}
  5397. {"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"}
  5398. {"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"}
  5399. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Elapsed":0}
  5400. {"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"}
  5401. {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate"}
  5402. {"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"}
  5403. {"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"}
  5404. {"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"}
  5405. {"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"}
  5406. {"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"}
  5407. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Elapsed":0}
  5408. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens"}
  5409. {"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"}
  5410. {"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"}
  5411. {"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"}
  5412. {"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"}
  5413. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Elapsed":0}
  5414. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt"}
  5415. {"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"}
  5416. {"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"}
  5417. {"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"}
  5418. {"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"}
  5419. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Elapsed":0}
  5420. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt"}
  5421. {"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"}
  5422. {"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"}
  5423. {"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"}
  5424. {"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"}
  5425. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Elapsed":0}
  5426. {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel"}
  5427. {"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"}
  5428. {"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"}
  5429. {"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"}
  5430. {"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"}
  5431. {"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"}
  5432. {"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"}
  5433. {"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"}
  5434. {"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}
  5435. {"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"}
  5436. {"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"}
  5437. {"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"}
  5438. {"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"}
  5439. {"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"}
  5440. {"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"}
  5441. {"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}
  5442. {"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"}
  5443. {"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"}
  5444. {"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"}
  5445. {"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"}
  5446. {"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"}
  5447. {"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"}
  5448. {"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}
  5449. {"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"}
  5450. {"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"}
  5451. {"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"}
  5452. {"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"}
  5453. {"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"}
  5454. {"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"}
  5455. {"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}
  5456. {"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"}
  5457. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Elapsed":0}
  5458. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata"}
  5459. {"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"}
  5460. {"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"}
  5461. {"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"}
  5462. {"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"}
  5463. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Elapsed":0}
  5464. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError"}
  5465. {"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"}
  5466. {"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"}
  5467. {"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"}
  5468. {"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"}
  5469. {"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"}
  5470. {"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"}
  5471. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Elapsed":0}
  5472. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing"}
  5473. {"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"}
  5474. {"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"}
  5475. {"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"}
  5476. {"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"}
  5477. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Elapsed":0}
  5478. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling"}
  5479. {"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"}
  5480. {"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"}
  5481. {"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"}
  5482. {"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"}
  5483. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Elapsed":0}
  5484. {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo"}
  5485. {"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"}
  5486. {"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"}
  5487. {"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"}
  5488. {"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"}
  5489. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Elapsed":0}
  5490. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError"}
  5491. {"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"}
  5492. {"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"}
  5493. {"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"}
  5494. {"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"}
  5495. {"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"}
  5496. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Elapsed":0}
  5497. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling"}
  5498. {"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"}
  5499. {"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"}
  5500. {"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"}
  5501. {"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"}
  5502. {"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"}
  5503. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Elapsed":0}
  5504. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext"}
  5505. {"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"}
  5506. {"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"}
  5507. {"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"}
  5508. {"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"}
  5509. {"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"}
  5510. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Elapsed":0}
  5511. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext"}
  5512. {"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"}
  5513. {"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"}
  5514. {"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"}
  5515. {"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"}
  5516. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Elapsed":0}
  5517. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash"}
  5518. {"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"}
  5519. {"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"}
  5520. {"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"}
  5521. {"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"}
  5522. {"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"}
  5523. {"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"}
  5524. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Elapsed":0}
  5525. {"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"}
  5526. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog"}
  5527. {"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"}
  5528. {"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"}
  5529. {"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"}
  5530. {"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"}
  5531. {"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"}
  5532. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Elapsed":0}
  5533. {"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"}
  5534. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID"}
  5535. {"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"}
  5536. {"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"}
  5537. {"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"}
  5538. {"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"}
  5539. {"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"}
  5540. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Elapsed":0}
  5541. {"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"}
  5542. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID"}
  5543. {"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"}
  5544. {"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"}
  5545. {"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"}
  5546. {"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"}
  5547. {"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"}
  5548. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Elapsed":0}
  5549. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing"}
  5550. {"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"}
  5551. {"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"}
  5552. {"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"}
  5553. {"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"}
  5554. {"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"}
  5555. {"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"}
  5556. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Elapsed":0}
  5557. {"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"}
  5558. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog"}
  5559. {"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"}
  5560. {"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"}
  5561. {"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"}
  5562. {"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"}
  5563. {"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"}
  5564. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Elapsed":0}
  5565. {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured"}
  5566. {"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"}
  5567. {"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"}
  5568. {"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"}
  5569. {"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"}
  5570. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Elapsed":0}
  5571. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero"}
  5572. {"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"}
  5573. {"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"}
  5574. {"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"}
  5575. {"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"}
  5576. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Elapsed":0}
  5577. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats"}
  5578. {"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"}
  5579. {"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"}
  5580. {"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"}
  5581. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Elapsed":0}
  5582. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff"}
  5583. {"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"}
  5584. {"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"}
  5585. {"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"}
  5586. {"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"}
  5587. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Elapsed":0}
  5588. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount"}
  5589. {"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"}
  5590. {"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"}
  5591. {"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"}
  5592. {"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"}
  5593. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Elapsed":0}
  5594. {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows"}
  5595. {"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"}
  5596. {"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"}
  5597. {"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"}
  5598. {"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"}
  5599. {"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"}
  5600. {"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"}
  5601. {"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}
  5602. {"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"}
  5603. {"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"}
  5604. {"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"}
  5605. {"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"}
  5606. {"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"}
  5607. {"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}
  5608. {"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"}
  5609. {"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"}
  5610. {"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"}
  5611. {"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"}
  5612. {"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"}
  5613. {"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}
  5614. {"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"}
  5615. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Elapsed":0}
  5616. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly"}
  5617. {"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"}
  5618. {"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"}
  5619. {"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"}
  5620. {"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"}
  5621. {"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"}
  5622. {"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"}
  5623. {"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}
  5624. {"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"}
  5625. {"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"}
  5626. {"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"}
  5627. {"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"}
  5628. {"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"}
  5629. {"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}
  5630. {"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"}
  5631. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Elapsed":0}
  5632. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting"}
  5633. {"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"}
  5634. {"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"}
  5635. {"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"}
  5636. {"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"}
  5637. {"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"}
  5638. {"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"}
  5639. {"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}
  5640. {"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"}
  5641. {"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"}
  5642. {"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"}
  5643. {"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"}
  5644. {"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"}
  5645. {"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}
  5646. {"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"}
  5647. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Elapsed":0}
  5648. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing"}
  5649. {"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"}
  5650. {"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"}
  5651. {"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"}
  5652. {"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"}
  5653. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Elapsed":0}
  5654. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost"}
  5655. {"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"}
  5656. {"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"}
  5657. {"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"}
  5658. {"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"}
  5659. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Elapsed":0}
  5660. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier"}
  5661. {"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"}
  5662. {"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"}
  5663. {"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"}
  5664. {"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"}
  5665. {"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}
  5666. {"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"}
  5667. {"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"}
  5668. {"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"}
  5669. {"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}
  5670. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored"}
  5671. {"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"}
  5672. {"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"}
  5673. {"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}
  5674. {"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"}
  5675. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Elapsed":0}
  5676. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier"}
  5677. {"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"}
  5678. {"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"}
  5679. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Elapsed":0}
  5680. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody"}
  5681. {"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"}
  5682. {"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"}
  5683. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Elapsed":0}
  5684. {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields"}
  5685. {"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"}
  5686. {"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"}
  5687. {"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"}
  5688. {"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"}
  5689. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Elapsed":0}
  5690. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort"}
  5691. {"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"}
  5692. {"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"}
  5693. {"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"}
  5694. {"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"}
  5695. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Elapsed":0}
  5696. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel"}
  5697. {"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"}
  5698. {"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"}
  5699. {"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"}
  5700. {"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"}
  5701. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Elapsed":0}
  5702. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel"}
  5703. {"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"}
  5704. {"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"}
  5705. {"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"}
  5706. {"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"}
  5707. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Elapsed":0}
  5708. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel"}
  5709. {"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"}
  5710. {"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"}
  5711. {"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"}
  5712. {"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"}
  5713. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Elapsed":0}
  5714. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped"}
  5715. {"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"}
  5716. {"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"}
  5717. {"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"}
  5718. {"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"}
  5719. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Elapsed":0}
  5720. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped"}
  5721. {"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"}
  5722. {"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"}
  5723. {"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"}
  5724. {"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"}
  5725. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Elapsed":0}
  5726. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource"}
  5727. {"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"}
  5728. {"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"}
  5729. {"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"}
  5730. {"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"}
  5731. {"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"}
  5732. {"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"}
  5733. {"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}
  5734. {"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"}
  5735. {"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"}
  5736. {"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"}
  5737. {"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"}
  5738. {"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"}
  5739. {"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}
  5740. {"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"}
  5741. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Elapsed":0}
  5742. {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias"}
  5743. {"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"}
  5744. {"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"}
  5745. {"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"}
  5746. {"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"}
  5747. {"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"}
  5748. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Elapsed":0}
  5749. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable"}
  5750. {"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"}
  5751. {"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"}
  5752. {"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"}
  5753. {"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"}
  5754. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Elapsed":0}
  5755. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog"}
  5756. {"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"}
  5757. {"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"}
  5758. {"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"}
  5759. {"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"}
  5760. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Elapsed":0}
  5761. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields"}
  5762. {"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"}
  5763. {"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"}
  5764. {"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"}
  5765. {"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"}
  5766. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Elapsed":0}
  5767. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist"}
  5768. {"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"}
  5769. {"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"}
  5770. {"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"}
  5771. {"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"}
  5772. {"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"}
  5773. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Elapsed":0}
  5774. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists"}
  5775. {"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"}
  5776. {"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"}
  5777. {"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"}
  5778. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Elapsed":0}
  5779. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence"}
  5780. {"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"}
  5781. {"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"}
  5782. {"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"}
  5783. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Elapsed":0}
  5784. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence"}
  5785. {"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"}
  5786. {"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"}
  5787. {"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"}
  5788. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Elapsed":0}
  5789. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens"}
  5790. {"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"}
  5791. {"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"}
  5792. {"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"}
  5793. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Elapsed":0}
  5794. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior"}
  5795. {"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"}
  5796. {"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"}
  5797. {"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"}
  5798. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Elapsed":0}
  5799. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride"}
  5800. {"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"}
  5801. {"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"}
  5802. {"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"}
  5803. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Elapsed":0}
  5804. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate"}
  5805. {"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"}
  5806. {"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"}
  5807. {"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"}
  5808. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Elapsed":0}
  5809. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard"}
  5810. {"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"}
  5811. {"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"}
  5812. {"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"}
  5813. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Elapsed":0}
  5814. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice"}
  5815. {"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"}
  5816. {"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"}
  5817. {"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"}
  5818. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Elapsed":0}
  5819. {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice"}
  5820. {"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"}
  5821. {"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"}
  5822. {"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"}
  5823. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Elapsed":0}
  5824. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice"}
  5825. {"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"}
  5826. {"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"}
  5827. {"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"}
  5828. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Elapsed":0}
  5829. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt"}
  5830. {"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"}
  5831. {"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"}
  5832. {"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"}
  5833. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Elapsed":0}
  5834. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt"}
  5835. {"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"}
  5836. {"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"}
  5837. {"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"}
  5838. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Elapsed":0}
  5839. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata"}
  5840. {"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"}
  5841. {"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"}
  5842. {"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"}
  5843. {"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"}
  5844. {"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"}
  5845. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Elapsed":0}
  5846. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier"}
  5847. {"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"}
  5848. {"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"}
  5849. {"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"}
  5850. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Elapsed":0}
  5851. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier"}
  5852. {"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"}
  5853. {"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"}
  5854. {"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"}
  5855. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Elapsed":0}
  5856. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse"}
  5857. {"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"}
  5858. {"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"}
  5859. {"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"}
  5860. {"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"}
  5861. {"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"}
  5862. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Elapsed":0}
  5863. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling"}
  5864. {"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"}
  5865. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth"}
  5866. {"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"}
  5867. {"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"}
  5868. {"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"}
  5869. {"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"}
  5870. {"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}
  5871. {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token"}
  5872. {"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"}
  5873. {"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"}
  5874. {"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"}
  5875. {"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"}
  5876. {"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}
  5877. {"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"}
  5878. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Elapsed":0}
  5879. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract"}
  5880. {"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"}
  5881. {"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"}
  5882. {"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"}
  5883. {"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"}
  5884. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Elapsed":0}
  5885. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard"}
  5886. {"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"}
  5887. {"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"}
  5888. {"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"}
  5889. {"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"}
  5890. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Elapsed":0}
  5891. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount"}
  5892. {"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"}
  5893. {"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"}
  5894. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Elapsed":0}
  5895. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse"}
  5896. {"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"}
  5897. {"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"}
  5898. {"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"}
  5899. {"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"}
  5900. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Elapsed":0}
  5901. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull"}
  5902. {"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"}
  5903. {"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"}
  5904. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Elapsed":0}
  5905. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly"}
  5906. {"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"}
  5907. {"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"}
  5908. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Elapsed":0}
  5909. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull"}
  5910. {"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"}
  5911. {"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"}
  5912. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Elapsed":0}
  5913. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems"}
  5914. {"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"}
  5915. {"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"}
  5916. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Elapsed":0}
  5917. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction"}
  5918. {"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"}
  5919. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction"}
  5920. {"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"}
  5921. {"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"}
  5922. {"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}
  5923. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary"}
  5924. {"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"}
  5925. {"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"}
  5926. {"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}
  5927. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction"}
  5928. {"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"}
  5929. {"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"}
  5930. {"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}
  5931. {"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"}
  5932. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Elapsed":0}
  5933. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem"}
  5934. {"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"}
  5935. {"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"}
  5936. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Elapsed":0}
  5937. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop"}
  5938. {"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"}
  5939. {"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"}
  5940. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Elapsed":0}
  5941. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop"}
  5942. {"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"}
  5943. {"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"}
  5944. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Elapsed":0}
  5945. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers"}
  5946. {"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"}
  5947. {"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"}
  5948. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Elapsed":0}
  5949. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton"}
  5950. {"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"}
  5951. {"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"}
  5952. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Elapsed":0}
  5953. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay"}
  5954. {"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"}
  5955. {"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"}
  5956. {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Elapsed":0}
  5957. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse"}
  5958. {"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"}
  5959. {"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"}
  5960. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Elapsed":0}
  5961. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode"}
  5962. {"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"}
  5963. {"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"}
  5964. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Elapsed":0}
  5965. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent"}
  5966. {"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"}
  5967. {"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"}
  5968. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Elapsed":0}
  5969. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools"}
  5970. {"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"}
  5971. {"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"}
  5972. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Elapsed":0}
  5973. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount"}
  5974. {"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"}
  5975. {"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"}
  5976. {"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"}
  5977. {"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"}
  5978. {"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}
  5979. {"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"}
  5980. {"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"}
  5981. {"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"}
  5982. {"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}
  5983. {"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"}
  5984. {"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"}
  5985. {"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"}
  5986. {"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}
  5987. {"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"}
  5988. {"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"}
  5989. {"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"}
  5990. {"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}
  5991. {"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"}
  5992. {"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"}
  5993. {"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"}
  5994. {"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}
  5995. {"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"}
  5996. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Elapsed":0}
  5997. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest"}
  5998. {"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"}
  5999. {"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"}
  6000. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Elapsed":0}
  6001. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools"}
  6002. {"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"}
  6003. {"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"}
  6004. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Elapsed":0}
  6005. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray"}
  6006. {"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"}
  6007. {"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"}
  6008. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Elapsed":0}
  6009. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes"}
  6010. {"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"}
  6011. {"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"}
  6012. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Elapsed":0}
  6013. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI"}
  6014. {"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"}
  6015. {"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"}
  6016. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Elapsed":0}
  6017. {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries"}
  6018. {"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"}
  6019. {"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"}
  6020. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Elapsed":0}
  6021. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce"}
  6022. {"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"}
  6023. {"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"}
  6024. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Elapsed":0}
  6025. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes"}
  6026. {"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"}
  6027. {"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"}
  6028. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Elapsed":0}
  6029. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual"}
  6030. {"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"}
  6031. {"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"}
  6032. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Elapsed":0}
  6033. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual"}
  6034. {"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"}
  6035. {"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"}
  6036. {"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"}
  6037. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Elapsed":0}
  6038. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover"}
  6039. {"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"}
  6040. {"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"}
  6041. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Elapsed":0}
  6042. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover"}
  6043. {"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"}
  6044. {"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"}
  6045. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Elapsed":0}
  6046. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent"}
  6047. {"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"}
  6048. {"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"}
  6049. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Elapsed":0}
  6050. {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately"}
  6051. {"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"}
  6052. {"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"}
  6053. {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Elapsed":1}
  6054. {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent"}
  6055. {"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"}
  6056. {"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"}
  6057. {"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}
  6058. {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries"}
  6059. {"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"}
  6060. {"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"}
  6061. {"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"}
  6062. {"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"}
  6063. {"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}
  6064. {"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"}
  6065. {"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"}
  6066. {"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"}
  6067. {"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}
  6068. {"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"}
  6069. {"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"}
  6070. {"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"}
  6071. {"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}
  6072. {"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"}
  6073. {"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"}
  6074. {"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"}
  6075. {"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}
  6076. {"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"}
  6077. {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Elapsed":0}
  6078. {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal"}
  6079. {"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"}
  6080. {"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"}
  6081. {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Elapsed":0}
  6082. {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis"}
  6083. {"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"}
  6084. {"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"}
  6085. {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Elapsed":0}
  6086. {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout"}
  6087. {"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"}
  6088. {"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"}
  6089. {"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}
  6090. {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed"}
  6091. {"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"}
  6092. {"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"}
  6093. {"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"}
  6094. {"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"}
  6095. {"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}
  6096. {"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"}
  6097. {"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"}
  6098. {"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"}
  6099. {"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}
  6100. {"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"}
  6101. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Elapsed":2}
  6102. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics"}
  6103. {"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"}
  6104. {"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"}
  6105. {"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"}
  6106. {"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"}
  6107. {"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}
  6108. {"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"}
  6109. {"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"}
  6110. {"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"}
  6111. {"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}
  6112. {"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"}
  6113. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Elapsed":0}
  6114. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage"}
  6115. {"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"}
  6116. {"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"}
  6117. {"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"}
  6118. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Elapsed":0}
  6119. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage"}
  6120. {"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"}
  6121. {"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"}
  6122. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Elapsed":0}
  6123. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen"}
  6124. {"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"}
  6125. {"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"}
  6126. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Elapsed":0}
  6127. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged"}
  6128. {"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"}
  6129. {"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"}
  6130. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Elapsed":0}
  6131. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride"}
  6132. {"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"}
  6133. {"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"}
  6134. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Elapsed":0}
  6135. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics"}
  6136. {"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"}
  6137. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty"}
  6138. {"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"}
  6139. {"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"}
  6140. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Elapsed":0}
  6141. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace"}
  6142. {"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"}
  6143. {"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"}
  6144. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Elapsed":0}
  6145. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done"}
  6146. {"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"}
  6147. {"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"}
  6148. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Elapsed":0}
  6149. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace"}
  6150. {"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"}
  6151. {"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"}
  6152. {"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}
  6153. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed"}
  6154. {"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"}
  6155. {"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"}
  6156. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Elapsed":0}
  6157. {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done"}
  6158. {"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"}
  6159. {"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"}
  6160. {"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}
  6161. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed"}
  6162. {"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"}
  6163. {"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"}
  6164. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Elapsed":0}
  6165. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete"}
  6166. {"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"}
  6167. {"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"}
  6168. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Elapsed":0}
  6169. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled"}
  6170. {"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"}
  6171. {"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"}
  6172. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Elapsed":0}
  6173. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled"}
  6174. {"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"}
  6175. {"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"}
  6176. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Elapsed":0}
  6177. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta"}
  6178. {"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"}
  6179. {"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"}
  6180. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Elapsed":0}
  6181. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON"}
  6182. {"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"}
  6183. {"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"}
  6184. {"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}
  6185. {"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"}
  6186. {"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"}
  6187. {"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"}
  6188. {"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}
  6189. {"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"}
  6190. {"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"}
  6191. {"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"}
  6192. {"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}
  6193. {"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"}
  6194. {"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"}
  6195. {"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"}
  6196. {"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}
  6197. {"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"}
  6198. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Elapsed":0}
  6199. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged"}
  6200. {"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"}
  6201. {"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"}
  6202. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Elapsed":0}
  6203. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData"}
  6204. {"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"}
  6205. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage"}
  6206. {"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"}
  6207. {"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"}
  6208. {"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}
  6209. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document"}
  6210. {"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"}
  6211. {"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"}
  6212. {"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}
  6213. {"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"}
  6214. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Elapsed":0}
  6215. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState"}
  6216. {"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"}
  6217. {"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"}
  6218. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Elapsed":0}
  6219. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming"}
  6220. {"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"}
  6221. {"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"}
  6222. {"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"}
  6223. {"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"}
  6224. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Elapsed":0}
  6225. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts"}
  6226. {"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"}
  6227. {"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"}
  6228. {"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"}
  6229. {"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"}
  6230. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Elapsed":0}
  6231. {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming"}
  6232. {"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"}
  6233. {"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"}
  6234. {"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"}
  6235. {"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"}
  6236. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Elapsed":0}
  6237. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector"}
  6238. {"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"}
  6239. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector"}
  6240. {"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"}
  6241. {"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"}
  6242. {"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}
  6243. {"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"}
  6244. {"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"}
  6245. {"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"}
  6246. {"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}
  6247. {"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"}
  6248. {"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"}
  6249. {"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"}
  6250. {"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}
  6251. {"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"}
  6252. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Elapsed":0}
  6253. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage"}
  6254. {"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"}
  6255. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案"}
  6256. {"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"}
  6257. {"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"}
  6258. {"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"}
  6259. {"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}
  6260. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案"}
  6261. {"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"}
  6262. {"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"}
  6263. {"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"}
  6264. {"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}
  6265. {"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"}
  6266. {"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}
  6267. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety"}
  6268. {"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"}
  6269. {"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"}
  6270. {"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"}
  6271. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Elapsed":0}
  6272. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected"}
  6273. {"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"}
  6274. {"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"}
  6275. {"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"}
  6276. {"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"}
  6277. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Elapsed":0}
  6278. {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails"}
  6279. {"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"}
  6280. {"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"}
  6281. {"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"}
  6282. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Elapsed":0}
  6283. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails"}
  6284. {"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"}
  6285. {"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"}
  6286. {"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"}
  6287. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Elapsed":0}
  6288. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped"}
  6289. {"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"}
  6290. {"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"}
  6291. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Elapsed":0}
  6292. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError"}
  6293. {"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"}
  6294. {"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"}
  6295. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Elapsed":0}
  6296. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError"}
  6297. {"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"}
  6298. {"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"}
  6299. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Elapsed":0}
  6300. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON"}
  6301. {"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"}
  6302. {"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"}
  6303. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Elapsed":0}
  6304. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502"}
  6305. {"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"}
  6306. {"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"}
  6307. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Elapsed":0}
  6308. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails"}
  6309. {"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"}
  6310. {"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"}
  6311. {"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"}
  6312. {"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"}
  6313. {"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}
  6314. {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover"}
  6315. {"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"}
  6316. {"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"}
  6317. {"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"}
  6318. {"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}
  6319. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry"}
  6320. {"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"}
  6321. {"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"}
  6322. {"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"}
  6323. {"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}
  6324. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime"}
  6325. {"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"}
  6326. {"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"}
  6327. {"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"}
  6328. {"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"}
  6329. {"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}
  6330. {"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"}
  6331. {"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"}
  6332. {"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"}
  6333. {"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}
  6334. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins"}
  6335. {"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"}
  6336. {"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"}
  6337. {"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}
  6338. {"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"}
  6339. {"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"}
  6340. {"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"}
  6341. {"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}
  6342. {"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"}
  6343. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Elapsed":0}
  6344. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339"}
  6345. {"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"}
  6346. {"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"}
  6347. {"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"}
  6348. {"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"}
  6349. {"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}
  6350. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds"}
  6351. {"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"}
  6352. {"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"}
  6353. {"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}
  6354. {"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"}
  6355. {"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"}
  6356. {"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"}
  6357. {"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}
  6358. {"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"}
  6359. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Elapsed":0}
  6360. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt"}
  6361. {"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"}
  6362. {"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"}
  6363. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Elapsed":0}
  6364. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994"}
  6365. {"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"}
  6366. {"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"}
  6367. {"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}
  6368. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid"}
  6369. {"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"}
  6370. {"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"}
  6371. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Elapsed":0}
  6372. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds"}
  6373. {"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"}
  6374. {"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"}
  6375. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Elapsed":0}
  6376. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot"}
  6377. {"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"}
  6378. {"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"}
  6379. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Elapsed":0}
  6380. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields"}
  6381. {"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"}
  6382. {"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"}
  6383. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Elapsed":0}
  6384. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars"}
  6385. {"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"}
  6386. {"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"}
  6387. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Elapsed":0}
  6388. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput"}
  6389. {"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"}
  6390. {"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"}
  6391. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Elapsed":0}
  6392. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField"}
  6393. {"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"}
  6394. {"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"}
  6395. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Elapsed":0}
  6396. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction"}
  6397. {"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"}
  6398. {"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"}
  6399. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Elapsed":0}
  6400. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior"}
  6401. {"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"}
  6402. {"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"}
  6403. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Elapsed":0}
  6404. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches"}
  6405. {"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"}
  6406. {"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"}
  6407. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Elapsed":0}
  6408. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath"}
  6409. {"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"}
  6410. {"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"}
  6411. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Elapsed":0}
  6412. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled"}
  6413. {"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"}
  6414. {"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"}
  6415. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Elapsed":0}
  6416. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches"}
  6417. {"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"}
  6418. {"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"}
  6419. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Elapsed":0}
  6420. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw"}
  6421. {"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"}
  6422. {"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"}
  6423. {"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"}
  6424. {"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"}
  6425. {"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}
  6426. {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes"}
  6427. {"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"}
  6428. {"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"}
  6429. {"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"}
  6430. {"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"}
  6431. {"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"}
  6432. {"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}
  6433. {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions"}
  6434. {"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"}
  6435. {"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"}
  6436. {"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"}
  6437. {"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"}
  6438. {"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"}
  6439. {"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}
  6440. {"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"}
  6441. {"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"}
  6442. {"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"}
  6443. {"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"}
  6444. {"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}
  6445. {"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"}
  6446. {"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}
  6447. {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate"}
  6448. {"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"}
  6449. {"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"}
  6450. {"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"}
  6451. {"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"}
  6452. {"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}
  6453. {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel"}
  6454. {"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"}
  6455. {"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"}
  6456. {"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"}
  6457. {"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"}
  6458. {"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}
  6459. {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel"}
  6460. {"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"}
  6461. {"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"}
  6462. {"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"}
  6463. {"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}
  6464. {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions"}
  6465. {"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"}
  6466. {"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"}
  6467. {"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"}
  6468. {"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"}
  6469. {"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"}
  6470. {"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"}
  6471. {"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}
  6472. {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal"}
  6473. {"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"}
  6474. {"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"}
  6475. {"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"}
  6476. {"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}
  6477. {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode"}
  6478. {"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"}
  6479. {"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"}
  6480. {"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"}
  6481. {"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"}
  6482. {"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}
  6483. {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized"}
  6484. {"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"}
  6485. {"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"}
  6486. {"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"}
  6487. {"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"}
  6488. {"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"}
  6489. {"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}
  6490. {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError"}
  6491. {"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"}
  6492. {"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"}
  6493. {"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"}
  6494. {"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"}
  6495. {"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"}
  6496. {"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}
  6497. {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction"}
  6498. {"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"}
  6499. {"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"}
  6500. {"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"}
  6501. {"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"}
  6502. {"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"}
  6503. {"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}
  6504. {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage"}
  6505. {"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"}
  6506. {"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"}
  6507. {"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}
  6508. {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling"}
  6509. {"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"}
  6510. {"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"}
  6511. {"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"}
  6512. {"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"}
  6513. {"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"}
  6514. {"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"}
  6515. {"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"}
  6516. {"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}
  6517. {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey"}
  6518. {"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"}
  6519. {"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"}
  6520. {"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"}
  6521. {"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"}
  6522. {"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}
  6523. {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey"}
  6524. {"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"}
  6525. {"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"}
  6526. {"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"}
  6527. {"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"}
  6528. {"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}
  6529. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON"}
  6530. {"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"}
  6531. {"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"}
  6532. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Elapsed":0}
  6533. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType"}
  6534. {"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"}
  6535. {"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"}
  6536. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Elapsed":0}
  6537. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix"}
  6538. {"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"}
  6539. {"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"}
  6540. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Elapsed":0}
  6541. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity"}
  6542. {"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"}
  6543. {"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"}
  6544. {"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"}
  6545. {"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"}
  6546. {"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"}
  6547. {"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}
  6548. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody"}
  6549. {"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"}
  6550. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段"}
  6551. {"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"}
  6552. {"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"}
  6553. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Elapsed":0}
  6554. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段"}
  6555. {"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"}
  6556. {"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"}
  6557. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Elapsed":0}
  6558. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体"}
  6559. {"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"}
  6560. {"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"}
  6561. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Elapsed":0}
  6562. {"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"}
  6563. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Elapsed":0}
  6564. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody"}
  6565. {"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"}
  6566. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort"}
  6567. {"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"}
  6568. {"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"}
  6569. {"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}
  6570. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort"}
  6571. {"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"}
  6572. {"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"}
  6573. {"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}
  6574. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max"}
  6575. {"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"}
  6576. {"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"}
  6577. {"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}
  6578. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh"}
  6579. {"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"}
  6580. {"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"}
  6581. {"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}
  6582. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空"}
  6583. {"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"}
  6584. {"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"}
  6585. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Elapsed":0}
  6586. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导"}
  6587. {"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"}
  6588. {"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"}
  6589. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Elapsed":0}
  6590. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回"}
  6591. {"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"}
  6592. {"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"}
  6593. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Elapsed":0}
  6594. {"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"}
  6595. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Elapsed":0}
  6596. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError"}
  6597. {"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"}
  6598. {"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"}
  6599. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Elapsed":0}
  6600. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache"}
  6601. {"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"}
  6602. {"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"}
  6603. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Elapsed":0}
  6604. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap"}
  6605. {"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"}
  6606. {"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"}
  6607. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Elapsed":0}
  6608. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody"}
  6609. {"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"}
  6610. {"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"}
  6611. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Elapsed":0}
  6612. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID"}
  6613. {"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"}
  6614. {"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"}
  6615. {"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"}
  6616. {"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"}
  6617. {"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}
  6618. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic"}
  6619. {"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"}
  6620. {"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"}
  6621. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Elapsed":0}
  6622. {"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"}
  6623. {"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"}
  6624. {"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"}
  6625. {"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}
  6626. {"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"}
  6627. {"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"}
  6628. {"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"}
  6629. {"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}
  6630. {"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"}
  6631. {"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"}
  6632. {"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"}
  6633. {"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}
  6634. {"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"}
  6635. {"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"}
  6636. {"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"}
  6637. {"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}
  6638. {"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"}
  6639. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Elapsed":0}
  6640. {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit"}
  6641. {"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"}
  6642. {"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"}
  6643. {"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"}
  6644. {"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"}
  6645. {"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"}
  6646. {"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"}
  6647. {"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}
  6648. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy"}
  6649. {"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"}
  6650. {"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"}
  6651. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Elapsed":0}
  6652. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority"}
  6653. {"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"}
  6654. {"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"}
  6655. {"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}
  6656. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority"}
  6657. {"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"}
  6658. {"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"}
  6659. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Elapsed":0}
  6660. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable"}
  6661. {"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"}
  6662. {"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"}
  6663. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Elapsed":0}
  6664. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs"}
  6665. {"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"}
  6666. {"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"}
  6667. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Elapsed":0}
  6668. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64"}
  6669. {"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"}
  6670. {"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"}
  6671. {"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}
  6672. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext"}
  6673. {"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"}
  6674. {"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"}
  6675. {"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}
  6676. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes"}
  6677. {"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"}
  6678. {"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"}
  6679. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Elapsed":0}
  6680. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens"}
  6681. {"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"}
  6682. {"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"}
  6683. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Elapsed":0}
  6684. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope"}
  6685. {"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"}
  6686. {"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"}
  6687. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Elapsed":0}
  6688. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope"}
  6689. {"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"}
  6690. {"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"}
  6691. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Elapsed":0}
  6692. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority"}
  6693. {"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"}
  6694. {"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"}
  6695. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Elapsed":0}
  6696. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount"}
  6697. {"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"}
  6698. {"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"}
  6699. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Elapsed":0}
  6700. {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback"}
  6701. {"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"}
  6702. {"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"}
  6703. {"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"}
  6704. {"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"}
  6705. {"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}
  6706. {"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"}
  6707. {"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"}
  6708. {"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"}
  6709. {"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}
  6710. {"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"}
  6711. {"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"}
  6712. {"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"}
  6713. {"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}
  6714. {"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"}
  6715. {"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}
  6716. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback"}
  6717. {"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"}
  6718. {"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"}
  6719. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Elapsed":0}
  6720. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback"}
  6721. {"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"}
  6722. {"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"}
  6723. {"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}
  6724. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent"}
  6725. {"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"}
  6726. {"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"}
  6727. {"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}
  6728. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty"}
  6729. {"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"}
  6730. {"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"}
  6731. {"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}
  6732. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable"}
  6733. {"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"}
  6734. {"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"}
  6735. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Elapsed":0}
  6736. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests"}
  6737. {"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"}
  6738. {"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"}
  6739. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Elapsed":0}
  6740. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService"}
  6741. {"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"}
  6742. {"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"}
  6743. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Elapsed":0}
  6744. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession"}
  6745. {"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"}
  6746. {"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"}
  6747. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Elapsed":0}
  6748. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession"}
  6749. {"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"}
  6750. {"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"}
  6751. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Elapsed":0}
  6752. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession"}
  6753. {"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"}
  6754. {"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"}
  6755. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Elapsed":0}
  6756. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession"}
  6757. {"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"}
  6758. {"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"}
  6759. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Elapsed":0}
  6760. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport"}
  6761. {"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"}
  6762. {"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"}
  6763. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Elapsed":0}
  6764. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback"}
  6765. {"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"}
  6766. {"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"}
  6767. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Elapsed":0}
  6768. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait"}
  6769. {"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"}
  6770. {"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"}
  6771. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Elapsed":0}
  6772. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding"}
  6773. {"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"}
  6774. {"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"}
  6775. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Elapsed":0}
  6776. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan"}
  6777. {"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"}
  6778. {"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"}
  6779. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Elapsed":0}
  6780. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding"}
  6781. {"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"}
  6782. {"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"}
  6783. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Elapsed":0}
  6784. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad"}
  6785. {"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"}
  6786. {"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"}
  6787. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Elapsed":0}
  6788. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback"}
  6789. {"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"}
  6790. {"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"}
  6791. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Elapsed":0}
  6792. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI"}
  6793. {"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"}
  6794. {"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"}
  6795. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Elapsed":0}
  6796. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts"}
  6797. {"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"}
  6798. {"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"}
  6799. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Elapsed":0}
  6800. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates"}
  6801. {"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"}
  6802. {"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"}
  6803. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Elapsed":0}
  6804. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan"}
  6805. {"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"}
  6806. {"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"}
  6807. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Elapsed":0}
  6808. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire"}
  6809. {"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"}
  6810. {"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"}
  6811. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Elapsed":0}
  6812. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo"}
  6813. {"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"}
  6814. {"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"}
  6815. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Elapsed":0}
  6816. {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed"}
  6817. {"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"}
  6818. {"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"}
  6819. {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Elapsed":0}
  6820. {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed"}
  6821. {"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"}
  6822. {"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"}
  6823. {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Elapsed":0}
  6824. {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout"}
  6825. {"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"}
  6826. {"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"}
  6827. {"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"}
  6828. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Elapsed":1}
  6829. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent"}
  6830. {"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"}
  6831. {"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"}
  6832. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Elapsed":0}
  6833. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover"}
  6834. {"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"}
  6835. {"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"}
  6836. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Elapsed":0}
  6837. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover"}
  6838. {"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"}
  6839. {"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"}
  6840. {"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"}
  6841. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Elapsed":0}
  6842. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy"}
  6843. {"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"}
  6844. {"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"}
  6845. {"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"}
  6846. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Elapsed":0}
  6847. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover"}
  6848. {"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"}
  6849. {"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"}
  6850. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Elapsed":0}
  6851. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover"}
  6852. {"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"}
  6853. {"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"}
  6854. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Elapsed":0}
  6855. {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover"}
  6856. {"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"}
  6857. {"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"}
  6858. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Elapsed":0}
  6859. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy"}
  6860. {"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"}
  6861. {"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"}
  6862. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Elapsed":0}
  6863. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling"}
  6864. {"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"}
  6865. {"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"}
  6866. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Elapsed":0}
  6867. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient"}
  6868. {"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"}
  6869. {"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"}
  6870. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Elapsed":0}
  6871. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough"}
  6872. {"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"}
  6873. {"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"}
  6874. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Elapsed":0}
  6875. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule"}
  6876. {"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"}
  6877. {"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"}
  6878. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Elapsed":0}
  6879. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover"}
  6880. {"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"}
  6881. {"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"}
  6882. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Elapsed":0}
  6883. {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle"}
  6884. {"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"}
  6885. {"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"}
  6886. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Elapsed":1.35}
  6887. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas"}
  6888. {"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"}
  6889. {"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"}
  6890. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Elapsed":0}
  6891. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray"}
  6892. {"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"}
  6893. {"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"}
  6894. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Elapsed":0}
  6895. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough"}
  6896. {"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"}
  6897. {"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"}
  6898. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Elapsed":0}
  6899. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage"}
  6900. {"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"}
  6901. {"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"}
  6902. {"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"}
  6903. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Elapsed":0}
  6904. {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError"}
  6905. {"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"}
  6906. {"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"}
  6907. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Elapsed":0}
  6908. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError"}
  6909. {"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"}
  6910. {"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"}
  6911. {"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"}
  6912. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Elapsed":0}
  6913. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy"}
  6914. {"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"}
  6915. {"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"}
  6916. {"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"}
  6917. {"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"}
  6918. {"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"}
  6919. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Elapsed":0}
  6920. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover"}
  6921. {"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"}
  6922. {"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"}
  6923. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Elapsed":0}
  6924. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule"}
  6925. {"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"}
  6926. {"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"}
  6927. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Elapsed":0}
  6928. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough"}
  6929. {"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"}
  6930. {"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"}
  6931. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Elapsed":0}
  6932. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient"}
  6933. {"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"}
  6934. {"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"}
  6935. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Elapsed":0}
  6936. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds"}
  6937. {"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"}
  6938. {"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"}
  6939. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Elapsed":0}
  6940. {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds"}
  6941. {"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"}
  6942. {"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"}
  6943. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Elapsed":0}
  6944. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong"}
  6945. {"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"}
  6946. {"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"}
  6947. {"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"}
  6948. {"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"}
  6949. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Elapsed":0}
  6950. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough"}
  6951. {"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"}
  6952. {"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"}
  6953. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Elapsed":0}
  6954. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault"}
  6955. {"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"}
  6956. {"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"}
  6957. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Elapsed":0}
  6958. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride"}
  6959. {"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"}
  6960. {"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"}
  6961. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Elapsed":0}
  6962. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks"}
  6963. {"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"}
  6964. {"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"}
  6965. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Elapsed":0}
  6966. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled"}
  6967. {"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"}
  6968. {"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"}
  6969. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Elapsed":0}
  6970. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS"}
  6971. {"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"}
  6972. {"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"}
  6973. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Elapsed":0}
  6974. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP"}
  6975. {"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"}
  6976. {"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"}
  6977. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Elapsed":0}
  6978. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist"}
  6979. {"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"}
  6980. {"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"}
  6981. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Elapsed":0}
  6982. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders"}
  6983. {"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"}
  6984. {"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"}
  6985. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Elapsed":0}
  6986. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix"}
  6987. {"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"}
  6988. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses"}
  6989. {"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"}
  6990. {"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"}
  6991. {"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}
  6992. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses"}
  6993. {"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"}
  6994. {"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"}
  6995. {"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}
  6996. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses"}
  6997. {"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"}
  6998. {"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"}
  6999. {"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}
  7000. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix"}
  7001. {"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"}
  7002. {"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"}
  7003. {"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}
  7004. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path"}
  7005. {"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"}
  7006. {"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"}
  7007. {"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}
  7008. {"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"}
  7009. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Elapsed":0}
  7010. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields"}
  7011. {"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"}
  7012. {"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"}
  7013. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Elapsed":0}
  7014. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools"}
  7015. {"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"}
  7016. {"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"}
  7017. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Elapsed":0}
  7018. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath"}
  7019. {"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"}
  7020. {"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"}
  7021. {"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"}
  7022. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Elapsed":0}
  7023. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader"}
  7024. {"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"}
  7025. {"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"}
  7026. {"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"}
  7027. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Elapsed":0}
  7028. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth"}
  7029. {"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"}
  7030. {"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"}
  7031. {"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"}
  7032. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Elapsed":0}
  7033. {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly"}
  7034. {"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"}
  7035. {"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"}
  7036. {"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"}
  7037. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Elapsed":0}
  7038. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL"}
  7039. {"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"}
  7040. {"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"}
  7041. {"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"}
  7042. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Elapsed":0}
  7043. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders"}
  7044. {"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"}
  7045. {"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"}
  7046. {"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"}
  7047. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Elapsed":0}
  7048. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility"}
  7049. {"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"}
  7050. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua"}
  7051. {"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"}
  7052. {"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"}
  7053. {"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"}
  7054. {"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}
  7055. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator"}
  7056. {"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"}
  7057. {"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"}
  7058. {"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"}
  7059. {"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}
  7060. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity"}
  7061. {"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"}
  7062. {"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"}
  7063. {"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"}
  7064. {"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}
  7065. {"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"}
  7066. {"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"}
  7067. {"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"}
  7068. {"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"}
  7069. {"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}
  7070. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua"}
  7071. {"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"}
  7072. {"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"}
  7073. {"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"}
  7074. {"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}
  7075. {"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"}
  7076. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Elapsed":0}
  7077. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine"}
  7078. {"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"}
  7079. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式"}
  7080. {"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"}
  7081. {"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"}
  7082. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Elapsed":0}
  7083. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式"}
  7084. {"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"}
  7085. {"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"}
  7086. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Elapsed":0}
  7087. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据"}
  7088. {"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"}
  7089. {"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"}
  7090. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Elapsed":0}
  7091. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行"}
  7092. {"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"}
  7093. {"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"}
  7094. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Elapsed":0}
  7095. {"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"}
  7096. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Elapsed":0}
  7097. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes"}
  7098. {"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"}
  7099. {"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"}
  7100. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Elapsed":0}
  7101. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens"}
  7102. {"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"}
  7103. {"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"}
  7104. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Elapsed":0}
  7105. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay"}
  7106. {"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"}
  7107. {"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"}
  7108. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Elapsed":0}
  7109. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary"}
  7110. {"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"}
  7111. {"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"}
  7112. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Elapsed":0}
  7113. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection"}
  7114. {"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"}
  7115. {"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"}
  7116. {"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"}
  7117. {"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"}
  7118. {"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"}
  7119. {"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}
  7120. {"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"}
  7121. {"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"}
  7122. {"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"}
  7123. {"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"}
  7124. {"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}
  7125. {"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"}
  7126. {"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"}
  7127. {"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"}
  7128. {"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}
  7129. {"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"}
  7130. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Elapsed":0}
  7131. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization"}
  7132. {"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"}
  7133. {"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"}
  7134. {"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"}
  7135. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Elapsed":0}
  7136. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels"}
  7137. {"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"}
  7138. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max"}
  7139. {"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"}
  7140. {"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"}
  7141. {"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}
  7142. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max"}
  7143. {"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"}
  7144. {"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"}
  7145. {"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}
  7146. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max"}
  7147. {"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"}
  7148. {"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"}
  7149. {"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}
  7150. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max"}
  7151. {"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"}
  7152. {"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"}
  7153. {"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}
  7154. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max"}
  7155. {"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"}
  7156. {"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"}
  7157. {"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}
  7158. {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh"}
  7159. {"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"}
  7160. {"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"}
  7161. {"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}
  7162. {"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"}
  7163. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Elapsed":0}
  7164. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax"}
  7165. {"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"}
  7166. {"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"}
  7167. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Elapsed":0}
  7168. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility"}
  7169. {"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"}
  7170. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级"}
  7171. {"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"}
  7172. {"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"}
  7173. {"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}
  7174. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留"}
  7175. {"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"}
  7176. {"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"}
  7177. {"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}
  7178. {"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_保留"}
  7179. {"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"}
  7180. {"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"}
  7181. {"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}
  7182. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留"}
  7183. {"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"}
  7184. {"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"}
  7185. {"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}
  7186. {"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"}
  7187. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Elapsed":0}
  7188. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort"}
  7189. {"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"}
  7190. {"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"}
  7191. {"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"}
  7192. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Elapsed":0}
  7193. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort"}
  7194. {"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"}
  7195. {"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"}
  7196. {"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"}
  7197. {"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"}
  7198. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Elapsed":0}
  7199. {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort"}
  7200. {"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"}
  7201. {"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"}
  7202. {"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"}
  7203. {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Elapsed":0}
  7204. {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire"}
  7205. {"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"}
  7206. {"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"}
  7207. {"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"}
  7208. {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Elapsed":0}
  7209. {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire"}
  7210. {"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"}
  7211. {"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"}
  7212. {"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"}
  7213. {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Elapsed":0}
  7214. {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage"}
  7215. {"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"}
  7216. {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian"}
  7217. {"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"}
  7218. {"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"}
  7219. {"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}
  7220. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review"}
  7221. {"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"}
  7222. {"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"}
  7223. {"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}
  7224. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN"}
  7225. {"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"}
  7226. {"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"}
  7227. {"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}
  7228. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only"}
  7229. {"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"}
  7230. {"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"}
  7231. {"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}
  7232. {"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"}
  7233. {"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"}
  7234. {"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"}
  7235. {"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}
  7236. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent"}
  7237. {"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"}
  7238. {"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"}
  7239. {"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}
  7240. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent"}
  7241. {"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"}
  7242. {"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"}
  7243. {"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}
  7244. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage"}
  7245. {"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"}
  7246. {"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"}
  7247. {"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}
  7248. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent"}
  7249. {"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"}
  7250. {"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"}
  7251. {"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}
  7252. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model"}
  7253. {"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"}
  7254. {"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"}
  7255. {"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}
  7256. {"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"}
  7257. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Elapsed":0}
  7258. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers"}
  7259. {"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"}
  7260. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy"}
  7261. {"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"}
  7262. {"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"}
  7263. {"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}
  7264. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced"}
  7265. {"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"}
  7266. {"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"}
  7267. {"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}
  7268. {"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"}
  7269. {"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"}
  7270. {"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"}
  7271. {"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}
  7272. {"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"}
  7273. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Elapsed":0}
  7274. {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass"}
  7275. {"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"}
  7276. {"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"}
  7277. {"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"}
  7278. {"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"}
  7279. {"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}
  7280. {"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"}
  7281. {"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"}
  7282. {"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"}
  7283. {"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}
  7284. {"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"}
  7285. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Elapsed":0}
  7286. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding"}
  7287. {"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"}
  7288. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy"}
  7289. {"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"}
  7290. {"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"}
  7291. {"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}
  7292. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced"}
  7293. {"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"}
  7294. {"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"}
  7295. {"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}
  7296. {"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"}
  7297. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Elapsed":0}
  7298. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy"}
  7299. {"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"}
  7300. {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy"}
  7301. {"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"}
  7302. {"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"}
  7303. {"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}
  7304. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced"}
  7305. {"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"}
  7306. {"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"}
  7307. {"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}
  7308. {"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"}
  7309. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Elapsed":0}
  7310. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy"}
  7311. {"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"}
  7312. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset"}
  7313. {"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"}
  7314. {"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"}
  7315. {"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}
  7316. {"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"}
  7317. {"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"}
  7318. {"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"}
  7319. {"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"}
  7320. {"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"}
  7321. {"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}
  7322. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group"}
  7323. {"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"}
  7324. {"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"}
  7325. {"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}
  7326. {"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"}
  7327. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Elapsed":0}
  7328. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership"}
  7329. {"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"}
  7330. {"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"}
  7331. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Elapsed":0}
  7332. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents"}
  7333. {"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"}
  7334. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model"}
  7335. {"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"}
  7336. {"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"}
  7337. {"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}
  7338. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool"}
  7339. {"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"}
  7340. {"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"}
  7341. {"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}
  7342. {"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"}
  7343. {"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"}
  7344. {"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"}
  7345. {"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}
  7346. {"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"}
  7347. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Elapsed":0}
  7348. {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses"}
  7349. {"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"}
  7350. {"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"}
  7351. {"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"}
  7352. {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Elapsed":0}
  7353. {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability"}
  7354. {"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"}
  7355. {"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"}
  7356. {"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"}
  7357. {"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"}
  7358. {"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"}
  7359. {"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}
  7360. {"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"}
  7361. {"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"}
  7362. {"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"}
  7363. {"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"}
  7364. {"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}
  7365. {"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"}
  7366. {"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"}
  7367. {"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"}
  7368. {"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"}
  7369. {"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"}
  7370. {"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"}
  7371. {"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"}
  7372. {"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"}
  7373. {"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}
  7374. {"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"}
  7375. {"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"}
  7376. {"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"}
  7377. {"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"}
  7378. {"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}
  7379. {"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"}
  7380. {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Elapsed":0}
  7381. {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader"}
  7382. {"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"}
  7383. {"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"}
  7384. {"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"}
  7385. {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Elapsed":0}
  7386. {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled"}
  7387. {"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"}
  7388. {"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"}
  7389. {"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"}
  7390. {"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"}
  7391. {"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"}
  7392. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Elapsed":0}
  7393. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool"}
  7394. {"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"}
  7395. {"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"}
  7396. {"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"}
  7397. {"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"}
  7398. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Elapsed":0}
  7399. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools"}
  7400. {"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"}
  7401. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding"}
  7402. {"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"}
  7403. {"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"}
  7404. {"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"}
  7405. {"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"}
  7406. {"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}
  7407. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding"}
  7408. {"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"}
  7409. {"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"}
  7410. {"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"}
  7411. {"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"}
  7412. {"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"}
  7413. {"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}
  7414. {"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"}
  7415. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Elapsed":0}
  7416. {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection"}
  7417. {"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"}
  7418. {"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"}
  7419. {"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"}
  7420. {"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"}
  7421. {"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"}
  7422. {"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"}
  7423. {"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"}
  7424. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Elapsed":0}
  7425. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace"}
  7426. {"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"}
  7427. {"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"}
  7428. {"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"}
  7429. {"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"}
  7430. {"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"}
  7431. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Elapsed":0}
  7432. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction"}
  7433. {"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"}
  7434. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function"}
  7435. {"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"}
  7436. {"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"}
  7437. {"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"}
  7438. {"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}
  7439. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function"}
  7440. {"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"}
  7441. {"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"}
  7442. {"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"}
  7443. {"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}
  7444. {"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"}
  7445. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Elapsed":0}
  7446. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice"}
  7447. {"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"}
  7448. {"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"}
  7449. {"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"}
  7450. {"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"}
  7451. {"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"}
  7452. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Elapsed":0}
  7453. {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests"}
  7454. {"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"}
  7455. {"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"}
  7456. {"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"}
  7457. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Elapsed":0}
  7458. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence"}
  7459. {"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"}
  7460. {"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"}
  7461. {"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"}
  7462. {"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"}
  7463. {"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}
  7464. {"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"}
  7465. {"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"}
  7466. {"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"}
  7467. {"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}
  7468. {"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"}
  7469. {"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"}
  7470. {"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"}
  7471. {"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}
  7472. {"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"}
  7473. {"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"}
  7474. {"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"}
  7475. {"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}
  7476. {"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"}
  7477. {"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"}
  7478. {"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"}
  7479. {"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}
  7480. {"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"}
  7481. {"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"}
  7482. {"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"}
  7483. {"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}
  7484. {"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"}
  7485. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Elapsed":0}
  7486. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming"}
  7487. {"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"}
  7488. {"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"}
  7489. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Elapsed":0}
  7490. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming"}
  7491. {"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"}
  7492. {"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"}
  7493. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Elapsed":0}
  7494. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough"}
  7495. {"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"}
  7496. {"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"}
  7497. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Elapsed":0}
  7498. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse"}
  7499. {"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"}
  7500. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true"}
  7501. {"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"}
  7502. {"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"}
  7503. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Elapsed":0}
  7504. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known"}
  7505. {"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"}
  7506. {"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"}
  7507. {"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}
  7508. {"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"}
  7509. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Elapsed":0}
  7510. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed"}
  7511. {"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"}
  7512. {"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"}
  7513. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Elapsed":0}
  7514. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover"}
  7515. {"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"}
  7516. {"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"}
  7517. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Elapsed":0}
  7518. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal"}
  7519. {"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"}
  7520. {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image"}
  7521. {"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"}
  7522. {"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"}
  7523. {"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}
  7524. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text"}
  7525. {"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"}
  7526. {"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"}
  7527. {"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}
  7528. {"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"}
  7529. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Elapsed":0}
  7530. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical"}
  7531. {"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"}
  7532. {"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"}
  7533. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Elapsed":0}
  7534. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical"}
  7535. {"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"}
  7536. {"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"}
  7537. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Elapsed":0}
  7538. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations"}
  7539. {"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"}
  7540. {"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"}
  7541. {"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"}
  7542. {"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"}
  7543. {"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}
  7544. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten"}
  7545. {"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"}
  7546. {"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"}
  7547. {"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}
  7548. {"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"}
  7549. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Elapsed":0}
  7550. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal"}
  7551. {"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"}
  7552. {"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"}
  7553. {"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"}
  7554. {"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"}
  7555. {"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}
  7556. {"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"}
  7557. {"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"}
  7558. {"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"}
  7559. {"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"}
  7560. {"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"}
  7561. {"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}
  7562. {"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"}
  7563. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Elapsed":0}
  7564. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport"}
  7565. {"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"}
  7566. {"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"}
  7567. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Elapsed":0}
  7568. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated"}
  7569. {"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"}
  7570. {"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"}
  7571. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Elapsed":0}
  7572. {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize"}
  7573. {"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"}
  7574. {"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"}
  7575. {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Elapsed":0.02}
  7576. {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions"}
  7577. {"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"}
  7578. {"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"}
  7579. {"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"}
  7580. {"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"}
  7581. {"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}
  7582. {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions"}
  7583. {"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"}
  7584. {"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"}
  7585. {"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"}
  7586. {"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"}
  7587. {"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}
  7588. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON"}
  7589. {"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"}
  7590. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回"}
  7591. {"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"}
  7592. {"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"}
  7593. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Elapsed":0}
  7594. {"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"}
  7595. {"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"}
  7596. {"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"}
  7597. {"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}
  7598. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填"}
  7599. {"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"}
  7600. {"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"}
  7601. {"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}
  7602. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载"}
  7603. {"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"}
  7604. {"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"}
  7605. {"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}
  7606. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项"}
  7607. {"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"}
  7608. {"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"}
  7609. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Elapsed":0}
  7610. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载"}
  7611. {"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"}
  7612. {"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"}
  7613. {"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}
  7614. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填"}
  7615. {"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"}
  7616. {"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"}
  7617. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Elapsed":0}
  7618. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样"}
  7619. {"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"}
  7620. {"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"}
  7621. {"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"}
  7622. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Elapsed":0}
  7623. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样"}
  7624. {"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"}
  7625. {"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"}
  7626. {"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"}
  7627. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Elapsed":0}
  7628. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填"}
  7629. {"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"}
  7630. {"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"}
  7631. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Elapsed":0}
  7632. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样"}
  7633. {"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"}
  7634. {"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"}
  7635. {"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"}
  7636. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Elapsed":0}
  7637. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载"}
  7638. {"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"}
  7639. {"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"}
  7640. {"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"}
  7641. {"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}
  7642. {"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"}
  7643. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Elapsed":0}
  7644. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape"}
  7645. {"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"}
  7646. {"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"}
  7647. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Elapsed":0}
  7648. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts"}
  7649. {"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"}
  7650. {"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"}
  7651. {"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"}
  7652. {"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"}
  7653. {"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"}
  7654. {"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"}
  7655. {"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"}
  7656. {"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"}
  7657. {"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"}
  7658. {"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"}
  7659. {"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"}
  7660. {"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"}
  7661. {"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"}
  7662. {"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"}
  7663. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Elapsed":0}
  7664. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies"}
  7665. {"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"}
  7666. {"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"}
  7667. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Elapsed":0}
  7668. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL"}
  7669. {"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"}
  7670. {"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"}
  7671. {"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"}
  7672. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Elapsed":0}
  7673. {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled"}
  7674. {"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"}
  7675. {"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"}
  7676. {"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"}
  7677. {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Elapsed":0}
  7678. {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse"}
  7679. {"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"}
  7680. {"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"}
  7681. {"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}
  7682. {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop"}
  7683. {"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"}
  7684. {"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"}
  7685. {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Elapsed":0}
  7686. {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus"}
  7687. {"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"}
  7688. {"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"}
  7689. {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Elapsed":0}
  7690. {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON"}
  7691. {"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"}
  7692. {"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"}
  7693. {"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}
  7694. {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection"}
  7695. {"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"}
  7696. {"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"}
  7697. {"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}
  7698. {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid"}
  7699. {"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"}
  7700. {"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"}
  7701. {"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}
  7702. {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards"}
  7703. {"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"}
  7704. {"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"}
  7705. {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Elapsed":0}
  7706. {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver"}
  7707. {"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"}
  7708. {"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"}
  7709. {"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"}
  7710. {"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"}
  7711. {"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}
  7712. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON"}
  7713. {"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"}
  7714. {"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"}
  7715. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Elapsed":0}
  7716. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit"}
  7717. {"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"}
  7718. {"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"}
  7719. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Elapsed":0}
  7720. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs"}
  7721. {"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"}
  7722. {"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"}
  7723. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Elapsed":0}
  7724. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory"}
  7725. {"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"}
  7726. {"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"}
  7727. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Elapsed":0}
  7728. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes"}
  7729. {"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"}
  7730. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024"}
  7731. {"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"}
  7732. {"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"}
  7733. {"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}
  7734. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024"}
  7735. {"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"}
  7736. {"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"}
  7737. {"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}
  7738. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536"}
  7739. {"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"}
  7740. {"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"}
  7741. {"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}
  7742. {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048"}
  7743. {"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"}
  7744. {"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"}
  7745. {"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}
  7746. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152"}
  7747. {"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"}
  7748. {"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"}
  7749. {"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}
  7750. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160"}
  7751. {"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"}
  7752. {"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"}
  7753. {"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}
  7754. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840"}
  7755. {"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"}
  7756. {"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"}
  7757. {"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}
  7758. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768"}
  7759. {"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"}
  7760. {"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"}
  7761. {"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}
  7762. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768"}
  7763. {"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"}
  7764. {"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"}
  7765. {"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}
  7766. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440"}
  7767. {"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"}
  7768. {"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"}
  7769. {"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}
  7770. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600"}
  7771. {"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"}
  7772. {"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"}
  7773. {"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}
  7774. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto"}
  7775. {"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"}
  7776. {"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"}
  7777. {"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}
  7778. {"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"}
  7779. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Elapsed":0}
  7780. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough"}
  7781. {"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"}
  7782. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153"}
  7783. {"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"}
  7784. {"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"}
  7785. {"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}
  7786. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024"}
  7787. {"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"}
  7788. {"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"}
  7789. {"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}
  7790. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024"}
  7791. {"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"}
  7792. {"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"}
  7793. {"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}
  7794. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512"}
  7795. {"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"}
  7796. {"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"}
  7797. {"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}
  7798. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid"}
  7799. {"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"}
  7800. {"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"}
  7801. {"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}
  7802. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2"}
  7803. {"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"}
  7804. {"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"}
  7805. {"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}
  7806. {"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"}
  7807. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Elapsed":0}
  7808. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough"}
  7809. {"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"}
  7810. {"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"}
  7811. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Elapsed":0}
  7812. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions"}
  7813. {"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"}
  7814. {"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"}
  7815. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Elapsed":0}
  7816. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic"}
  7817. {"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"}
  7818. {"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"}
  7819. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Elapsed":0}
  7820. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability"}
  7821. {"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"}
  7822. {"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"}
  7823. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Elapsed":0}
  7824. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel"}
  7825. {"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"}
  7826. {"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"}
  7827. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Elapsed":0}
  7828. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels"}
  7829. {"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"}
  7830. {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine"}
  7831. {"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"}
  7832. {"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"}
  7833. {"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}
  7834. {"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"}
  7835. {"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"}
  7836. {"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"}
  7837. {"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}
  7838. {"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"}
  7839. {"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"}
  7840. {"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"}
  7841. {"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}
  7842. {"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"}
  7843. {"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"}
  7844. {"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"}
  7845. {"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}
  7846. {"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"}
  7847. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Elapsed":0}
  7848. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs"}
  7849. {"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"}
  7850. {"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"}
  7851. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Elapsed":0}
  7852. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets"}
  7853. {"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"}
  7854. {"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"}
  7855. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Elapsed":0}
  7856. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64"}
  7857. {"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"}
  7858. {"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"}
  7859. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Elapsed":0}
  7860. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit"}
  7861. {"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"}
  7862. {"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"}
  7863. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Elapsed":0}
  7864. {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit"}
  7865. {"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"}
  7866. {"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"}
  7867. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Elapsed":0}
  7868. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative"}
  7869. {"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"}
  7870. {"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"}
  7871. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Elapsed":0}
  7872. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative"}
  7873. {"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"}
  7874. {"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"}
  7875. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Elapsed":0}
  7876. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok"}
  7877. {"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"}
  7878. {"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"}
  7879. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Elapsed":0}
  7880. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability"}
  7881. {"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"}
  7882. {"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"}
  7883. {"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"}
  7884. {"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"}
  7885. {"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}
  7886. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat"}
  7887. {"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"}
  7888. {"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"}
  7889. {"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}
  7890. {"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"}
  7891. {"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"}
  7892. {"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"}
  7893. {"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}
  7894. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings"}
  7895. {"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"}
  7896. {"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"}
  7897. {"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}
  7898. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings"}
  7899. {"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"}
  7900. {"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"}
  7901. {"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}
  7902. {"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"}
  7903. {"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"}
  7904. {"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"}
  7905. {"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}
  7906. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings"}
  7907. {"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"}
  7908. {"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"}
  7909. {"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}
  7910. {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度"}
  7911. {"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"}
  7912. {"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"}
  7913. {"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}
  7914. {"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_文本调度"}
  7915. {"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"}
  7916. {"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"}
  7917. {"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}
  7918. {"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_文本调度"}
  7919. {"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"}
  7920. {"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"}
  7921. {"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}
  7922. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行"}
  7923. {"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"}
  7924. {"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"}
  7925. {"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}
  7926. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行"}
  7927. {"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"}
  7928. {"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"}
  7929. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Elapsed":0}
  7930. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行"}
  7931. {"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"}
  7932. {"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"}
  7933. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Elapsed":0}
  7934. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行"}
  7935. {"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"}
  7936. {"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"}
  7937. {"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}
  7938. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除"}
  7939. {"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"}
  7940. {"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"}
  7941. {"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}
  7942. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行"}
  7943. {"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"}
  7944. {"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"}
  7945. {"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}
  7946. {"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"}
  7947. {"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"}
  7948. {"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"}
  7949. {"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}
  7950. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响"}
  7951. {"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"}
  7952. {"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"}
  7953. {"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}
  7954. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验"}
  7955. {"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"}
  7956. {"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"}
  7957. {"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}
  7958. {"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"}
  7959. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Elapsed":0}
  7960. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL"}
  7961. {"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"}
  7962. {"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"}
  7963. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Elapsed":0}
  7964. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages"}
  7965. {"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"}
  7966. {"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"}
  7967. {"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"}
  7968. {"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"}
  7969. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Elapsed":0}
  7970. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback"}
  7971. {"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"}
  7972. {"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"}
  7973. {"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"}
  7974. {"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"}
  7975. {"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}
  7976. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent"}
  7977. {"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"}
  7978. {"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"}
  7979. {"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}
  7980. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field"}
  7981. {"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"}
  7982. {"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"}
  7983. {"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}
  7984. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field"}
  7985. {"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"}
  7986. {"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"}
  7987. {"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}
  7988. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field"}
  7989. {"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"}
  7990. {"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"}
  7991. {"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}
  7992. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field"}
  7993. {"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"}
  7994. {"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"}
  7995. {"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}
  7996. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object"}
  7997. {"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"}
  7998. {"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"}
  7999. {"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}
  8000. {"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"}
  8001. {"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"}
  8002. {"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"}
  8003. {"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}
  8004. {"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"}
  8005. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Elapsed":0}
  8006. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage"}
  8007. {"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"}
  8008. {"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"}
  8009. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Elapsed":0}
  8010. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError"}
  8011. {"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"}
  8012. {"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"}
  8013. {"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"}
  8014. {"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"}
  8015. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Elapsed":0}
  8016. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError"}
  8017. {"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"}
  8018. {"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"}
  8019. {"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"}
  8020. {"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"}
  8021. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Elapsed":0}
  8022. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush"}
  8023. {"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"}
  8024. {"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"}
  8025. {"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"}
  8026. {"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"}
  8027. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Elapsed":0}
  8028. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow"}
  8029. {"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"}
  8030. {"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"}
  8031. {"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"}
  8032. {"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"}
  8033. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Elapsed":0}
  8034. {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover"}
  8035. {"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"}
  8036. {"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"}
  8037. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Elapsed":0}
  8038. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified"}
  8039. {"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"}
  8040. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled"}
  8041. {"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"}
  8042. {"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"}
  8043. {"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}
  8044. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large"}
  8045. {"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"}
  8046. {"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"}
  8047. {"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}
  8048. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error"}
  8049. {"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"}
  8050. {"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"}
  8051. {"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}
  8052. {"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"}
  8053. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Elapsed":0}
  8054. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover"}
  8055. {"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"}
  8056. {"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"}
  8057. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Elapsed":0}
  8058. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings"}
  8059. {"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"}
  8060. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF"}
  8061. {"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"}
  8062. {"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"}
  8063. {"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}
  8064. {"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"}
  8065. {"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"}
  8066. {"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"}
  8067. {"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}
  8068. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe"}
  8069. {"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"}
  8070. {"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"}
  8071. {"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}
  8072. {"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"}
  8073. {"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"}
  8074. {"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"}
  8075. {"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}
  8076. {"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"}
  8077. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Elapsed":0}
  8078. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover"}
  8079. {"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"}
  8080. {"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"}
  8081. {"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"}
  8082. {"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"}
  8083. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Elapsed":0}
  8084. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable"}
  8085. {"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"}
  8086. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request"}
  8087. {"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"}
  8088. {"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"}
  8089. {"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}
  8090. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy"}
  8091. {"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"}
  8092. {"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"}
  8093. {"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}
  8094. {"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"}
  8095. {"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"}
  8096. {"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"}
  8097. {"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}
  8098. {"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"}
  8099. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Elapsed":0}
  8100. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL"}
  8101. {"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"}
  8102. {"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"}
  8103. {"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"}
  8104. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Elapsed":0}
  8105. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover"}
  8106. {"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"}
  8107. {"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"}
  8108. {"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"}
  8109. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Elapsed":0}
  8110. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage"}
  8111. {"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"}
  8112. {"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"}
  8113. {"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"}
  8114. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Elapsed":0}
  8115. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage"}
  8116. {"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"}
  8117. {"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"}
  8118. {"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"}
  8119. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Elapsed":0}
  8120. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage"}
  8121. {"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"}
  8122. {"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"}
  8123. {"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"}
  8124. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Elapsed":0}
  8125. {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent"}
  8126. {"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"}
  8127. {"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"}
  8128. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Elapsed":0}
  8129. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL"}
  8130. {"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"}
  8131. {"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"}
  8132. {"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"}
  8133. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Elapsed":0}
  8134. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents"}
  8135. {"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"}
  8136. {"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"}
  8137. {"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"}
  8138. {"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"}
  8139. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Elapsed":0}
  8140. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect"}
  8141. {"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"}
  8142. {"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"}
  8143. {"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"}
  8144. {"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"}
  8145. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Elapsed":0}
  8146. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI"}
  8147. {"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"}
  8148. {"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"}
  8149. {"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"}
  8150. {"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"}
  8151. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Elapsed":0}
  8152. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents"}
  8153. {"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"}
  8154. {"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"}
  8155. {"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"}
  8156. {"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"}
  8157. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Elapsed":0}
  8158. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels"}
  8159. {"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"}
  8160. {"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"}
  8161. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Elapsed":0}
  8162. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice"}
  8163. {"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"}
  8164. {"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"}
  8165. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Elapsed":0}
  8166. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3"}
  8167. {"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"}
  8168. {"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"}
  8169. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Elapsed":0}
  8170. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity"}
  8171. {"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"}
  8172. {"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"}
  8173. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Elapsed":0}
  8174. {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt"}
  8175. {"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"}
  8176. {"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"}
  8177. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Elapsed":0}
  8178. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone"}
  8179. {"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"}
  8180. {"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"}
  8181. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Elapsed":0}
  8182. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE"}
  8183. {"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"}
  8184. {"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"}
  8185. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Elapsed":0}
  8186. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback"}
  8187. {"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"}
  8188. {"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"}
  8189. {"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"}
  8190. {"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"}
  8191. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Elapsed":0}
  8192. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE"}
  8193. {"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"}
  8194. {"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"}
  8195. {"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"}
  8196. {"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"}
  8197. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Elapsed":0}
  8198. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect"}
  8199. {"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"}
  8200. {"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"}
  8201. {"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"}
  8202. {"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"}
  8203. {"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"}
  8204. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Elapsed":0}
  8205. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext"}
  8206. {"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"}
  8207. {"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"}
  8208. {"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"}
  8209. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Elapsed":0}
  8210. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext"}
  8211. {"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"}
  8212. {"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"}
  8213. {"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"}
  8214. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Elapsed":0}
  8215. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth"}
  8216. {"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"}
  8217. {"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"}
  8218. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Elapsed":0}
  8219. {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy"}
  8220. {"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"}
  8221. {"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"}
  8222. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Elapsed":0}
  8223. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"}
  8224. {"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"}
  8225. {"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"}
  8226. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"}
  8227. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"}
  8228. {"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"}
  8229. {"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"}
  8230. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"}
  8231. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence"}
  8232. {"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"}
  8233. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input"}
  8234. {"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"}
  8235. {"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"}
  8236. {"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}
  8237. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts"}
  8238. {"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"}
  8239. {"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"}
  8240. {"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}
  8241. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata"}
  8242. {"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"}
  8243. {"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"}
  8244. {"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}
  8245. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion"}
  8246. {"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"}
  8247. {"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"}
  8248. {"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}
  8249. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema"}
  8250. {"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"}
  8251. {"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"}
  8252. {"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}
  8253. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result"}
  8254. {"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"}
  8255. {"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"}
  8256. {"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}
  8257. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair"}
  8258. {"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"}
  8259. {"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"}
  8260. {"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}
  8261. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias"}
  8262. {"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"}
  8263. {"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"}
  8264. {"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}
  8265. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility"}
  8266. {"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"}
  8267. {"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"}
  8268. {"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}
  8269. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode"}
  8270. {"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"}
  8271. {"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"}
  8272. {"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}
  8273. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget"}
  8274. {"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"}
  8275. {"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"}
  8276. {"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}
  8277. {"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"}
  8278. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Elapsed":0}
  8279. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss"}
  8280. {"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"}
  8281. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text"}
  8282. {"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"}
  8283. {"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"}
  8284. {"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}
  8285. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn"}
  8286. {"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"}
  8287. {"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"}
  8288. {"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}
  8289. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system"}
  8290. {"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"}
  8291. {"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"}
  8292. {"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}
  8293. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning"}
  8294. {"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"}
  8295. {"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"}
  8296. {"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}
  8297. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference"}
  8298. {"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"}
  8299. {"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"}
  8300. {"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}
  8301. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id"}
  8302. {"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"}
  8303. {"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"}
  8304. {"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}
  8305. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result"}
  8306. {"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"}
  8307. {"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"}
  8308. {"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}
  8309. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools"}
  8310. {"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"}
  8311. {"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"}
  8312. {"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}
  8313. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools"}
  8314. {"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"}
  8315. {"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"}
  8316. {"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}
  8317. {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association"}
  8318. {"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"}
  8319. {"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"}
  8320. {"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}
  8321. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool"}
  8322. {"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"}
  8323. {"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"}
  8324. {"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}
  8325. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning"}
  8326. {"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"}
  8327. {"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"}
  8328. {"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}
  8329. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode"}
  8330. {"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"}
  8331. {"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"}
  8332. {"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}
  8333. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model"}
  8334. {"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"}
  8335. {"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"}
  8336. {"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}
  8337. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget"}
  8338. {"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"}
  8339. {"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"}
  8340. {"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}
  8341. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity"}
  8342. {"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"}
  8343. {"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"}
  8344. {"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}
  8345. {"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"}
  8346. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Elapsed":0}
  8347. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform"}
  8348. {"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"}
  8349. {"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"}
  8350. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Elapsed":0}
  8351. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON"}
  8352. {"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"}
  8353. {"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"}
  8354. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Elapsed":0}
  8355. {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations"}
  8356. {"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"}
  8357. {"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"}
  8358. {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Elapsed":0}
  8359. {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames"}
  8360. {"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"}
  8361. {"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"}
  8362. {"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"}
  8363. {"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"}
  8364. {"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"}
  8365. {"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"}
  8366. {"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"}
  8367. {"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"}
  8368. {"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"}
  8369. {"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"}
  8370. {"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"}
  8371. {"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"}
  8372. {"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"}
  8373. {"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"}
  8374. {"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"}
  8375. {"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"}
  8376. {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"fail","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Elapsed":0}
  8377. {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra"}
  8378. {"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"}
  8379. {"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"}
  8380. {"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"}
  8381. {"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"}
  8382. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Elapsed":0}
  8383. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol"}
  8384. {"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"}
  8385. {"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"}
  8386. {"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"}
  8387. {"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"}
  8388. {"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}
  8389. {"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"}
  8390. {"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"}
  8391. {"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"}
  8392. {"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}
  8393. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6"}
  8394. {"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"}
  8395. {"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"}
  8396. {"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}
  8397. {"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"}
  8398. {"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"}
  8399. {"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"}
  8400. {"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}
  8401. {"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"}
  8402. {"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"}
  8403. {"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"}
  8404. {"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}
  8405. {"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"}
  8406. {"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"}
  8407. {"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"}
  8408. {"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}
  8409. {"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"}
  8410. {"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"}
  8411. {"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"}
  8412. {"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}
  8413. {"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"}
  8414. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Elapsed":0}
  8415. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel"}
  8416. {"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"}
  8417. {"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"}
  8418. {"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"}
  8419. {"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"}
  8420. {"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}
  8421. {"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"}
  8422. {"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"}
  8423. {"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"}
  8424. {"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}
  8425. {"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"}
  8426. {"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"}
  8427. {"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"}
  8428. {"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}
  8429. {"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"}
  8430. {"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"}
  8431. {"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"}
  8432. {"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}
  8433. {"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"}
  8434. {"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"}
  8435. {"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"}
  8436. {"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}
  8437. {"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"}
  8438. {"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"}
  8439. {"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"}
  8440. {"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}
  8441. {"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"}
  8442. {"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"}
  8443. {"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"}
  8444. {"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}
  8445. {"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"}
  8446. {"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"}
  8447. {"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"}
  8448. {"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}
  8449. {"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"}
  8450. {"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"}
  8451. {"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"}
  8452. {"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}
  8453. {"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"}
  8454. {"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"}
  8455. {"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"}
  8456. {"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}
  8457. {"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"}
  8458. {"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"}
  8459. {"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"}
  8460. {"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}
  8461. {"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"}
  8462. {"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"}
  8463. {"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"}
  8464. {"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}
  8465. {"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"}
  8466. {"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"}
  8467. {"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"}
  8468. {"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}
  8469. {"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"}
  8470. {"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"}
  8471. {"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"}
  8472. {"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}
  8473. {"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"}
  8474. {"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"}
  8475. {"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"}
  8476. {"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}
  8477. {"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"}
  8478. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Elapsed":0}
  8479. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel"}
  8480. {"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"}
  8481. {"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"}
  8482. {"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"}
  8483. {"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"}
  8484. {"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}
  8485. {"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"}
  8486. {"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"}
  8487. {"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"}
  8488. {"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}
  8489. {"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"}
  8490. {"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"}
  8491. {"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"}
  8492. {"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}
  8493. {"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"}
  8494. {"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"}
  8495. {"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"}
  8496. {"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}
  8497. {"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"}
  8498. {"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"}
  8499. {"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"}
  8500. {"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}
  8501. {"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"}
  8502. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Elapsed":0}
  8503. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence"}
  8504. {"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"}
  8505. {"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"}
  8506. {"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"}
  8507. {"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"}
  8508. {"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}
  8509. {"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"}
  8510. {"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"}
  8511. {"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"}
  8512. {"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}
  8513. {"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"}
  8514. {"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"}
  8515. {"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"}
  8516. {"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}
  8517. {"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"}
  8518. {"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"}
  8519. {"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"}
  8520. {"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}
  8521. {"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"}
  8522. {"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"}
  8523. {"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"}
  8524. {"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}
  8525. {"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"}
  8526. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Elapsed":0}
  8527. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics"}
  8528. {"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"}
  8529. {"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"}
  8530. {"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"}
  8531. {"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"}
  8532. {"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}
  8533. {"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"}
  8534. {"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"}
  8535. {"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"}
  8536. {"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}
  8537. {"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"}
  8538. {"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"}
  8539. {"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"}
  8540. {"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}
  8541. {"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"}
  8542. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Elapsed":0}
  8543. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel"}
  8544. {"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"}
  8545. {"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"}
  8546. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Elapsed":0}
  8547. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel"}
  8548. {"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"}
  8549. {"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"}
  8550. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Elapsed":0}
  8551. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream"}
  8552. {"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"}
  8553. {"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"}
  8554. {"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"}
  8555. {"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"}
  8556. {"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}
  8557. {"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"}
  8558. {"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"}
  8559. {"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"}
  8560. {"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}
  8561. {"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"}
  8562. {"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"}
  8563. {"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"}
  8564. {"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}
  8565. {"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"}
  8566. {"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"}
  8567. {"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"}
  8568. {"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}
  8569. {"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"}
  8570. {"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"}
  8571. {"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"}
  8572. {"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}
  8573. {"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"}
  8574. {"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"}
  8575. {"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"}
  8576. {"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}
  8577. {"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"}
  8578. {"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"}
  8579. {"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"}
  8580. {"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}
  8581. {"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"}
  8582. {"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"}
  8583. {"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"}
  8584. {"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}
  8585. {"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"}
  8586. {"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"}
  8587. {"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"}
  8588. {"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}
  8589. {"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"}
  8590. {"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"}
  8591. {"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"}
  8592. {"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}
  8593. {"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"}
  8594. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Elapsed":0}
  8595. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel"}
  8596. {"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"}
  8597. {"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"}
  8598. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Elapsed":0}
  8599. {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache"}
  8600. {"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"}
  8601. {"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"}
  8602. {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Elapsed":0}
  8603. {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache"}
  8604. {"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"}
  8605. {"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"}
  8606. {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Elapsed":0}
  8607. {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight"}
  8608. {"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"}
  8609. {"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"}
  8610. {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Elapsed":0.02}
  8611. {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag"}
  8612. {"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"}
  8613. {"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"}
  8614. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Elapsed":0}
  8615. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses"}
  8616. {"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"}
  8617. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}"}
  8618. {"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"}
  8619. {"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"}
  8620. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Elapsed":0}
  8621. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}"}
  8622. {"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"}
  8623. {"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"}
  8624. {"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}
  8625. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}"}
  8626. {"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"}
  8627. {"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"}
  8628. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Elapsed":0}
  8629. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}"}
  8630. {"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"}
  8631. {"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"}
  8632. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Elapsed":0}
  8633. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}"}
  8634. {"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"}
  8635. {"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"}
  8636. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Elapsed":0}
  8637. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}"}
  8638. {"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"}
  8639. {"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"}
  8640. {"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}
  8641. {"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"}
  8642. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Elapsed":0}
  8643. {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups"}
  8644. {"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"}
  8645. {"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"}
  8646. {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Elapsed":0}
  8647. {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials"}
  8648. {"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"}
  8649. {"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"}
  8650. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Elapsed":0}
  8651. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias"}
  8652. {"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"}
  8653. {"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"}
  8654. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Elapsed":0}
  8655. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304"}
  8656. {"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"}
  8657. {"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"}
  8658. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Elapsed":0}
  8659. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests"}
  8660. {"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"}
  8661. {"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"}
  8662. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Elapsed":0}
  8663. {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54"}
  8664. {"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"}
  8665. {"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"}
  8666. {"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"}
  8667. {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Elapsed":0}
  8668. {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication"}
  8669. {"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"}
  8670. {"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"}
  8671. {"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"}
  8672. {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Elapsed":0}
  8673. {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars"}
  8674. {"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"}
  8675. {"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"}
  8676. {"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"}
  8677. {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Elapsed":0}
  8678. {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions"}
  8679. {"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"}
  8680. {"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"}
  8681. {"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"}
  8682. {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Elapsed":0}
  8683. {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized"}
  8684. {"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"}
  8685. {"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"}
  8686. {"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"}
  8687. {"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"}
  8688. {"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}
  8689. {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier"}
  8690. {"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"}
  8691. {"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"}
  8692. {"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"}
  8693. {"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"}
  8694. {"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}
  8695. {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest"}
  8696. {"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"}
  8697. {"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"}
  8698. {"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"}
  8699. {"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"}
  8700. {"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}
  8701. {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse"}
  8702. {"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"}
  8703. {"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"}
  8704. {"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"}
  8705. {"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"}
  8706. {"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}
  8707. {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse"}
  8708. {"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"}
  8709. {"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"}
  8710. {"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"}
  8711. {"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}
  8712. {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse"}
  8713. {"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"}
  8714. {"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"}
  8715. {"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}
  8716. {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse"}
  8717. {"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"}
  8718. {"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"}
  8719. {"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}
  8720. {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest"}
  8721. {"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"}
  8722. {"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"}
  8723. {"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}
  8724. {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming"}
  8725. {"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"}
  8726. {"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"}
  8727. {"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"}
  8728. {"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"}
  8729. {"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}
  8730. {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel"}
  8731. {"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"}
  8732. {"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"}
  8733. {"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"}
  8734. {"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"}
  8735. {"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}
  8736. {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault"}
  8737. {"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"}
  8738. {"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"}
  8739. {"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"}
  8740. {"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"}
  8741. {"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"}
  8742. {"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"}
  8743. {"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}
  8744. {"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"}
  8745. {"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"}
  8746. {"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"}
  8747. {"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"}
  8748. {"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"}
  8749. {"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}
  8750. {"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"}
  8751. {"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}
  8752. {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate"}
  8753. {"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"}
  8754. {"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"}
  8755. {"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"}
  8756. {"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"}
  8757. {"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}
  8758. {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform"}
  8759. {"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"}
  8760. {"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"}
  8761. {"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"}
  8762. {"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}
  8763. {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier"}
  8764. {"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"}
  8765. {"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"}
  8766. {"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"}
  8767. {"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}
  8768. {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter"}
  8769. {"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"}
  8770. {"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"}
  8771. {"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"}
  8772. {"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}
  8773. {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel"}
  8774. {"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"}
  8775. {"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"}
  8776. {"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"}
  8777. {"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}
  8778. {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator"}
  8779. {"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"}
  8780. {"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"}
  8781. {"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"}
  8782. {"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}
  8783. {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex"}
  8784. {"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"}
  8785. {"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"}
  8786. {"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"}
  8787. {"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"}
  8788. {"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}
  8789. {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag"}
  8790. {"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"}
  8791. {"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"}
  8792. {"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"}
  8793. {"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"}
  8794. {"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}
  8795. {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors"}
  8796. {"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"}
  8797. {"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"}
  8798. {"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"}
  8799. {"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"}
  8800. {"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"}
  8801. {"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"}
  8802. {"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}
  8803. {"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"}
  8804. {"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"}
  8805. {"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"}
  8806. {"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"}
  8807. {"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"}
  8808. {"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}
  8809. {"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"}
  8810. {"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"}
  8811. {"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"}
  8812. {"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"}
  8813. {"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"}
  8814. {"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}
  8815. {"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"}
  8816. {"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"}
  8817. {"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"}
  8818. {"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"}
  8819. {"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"}
  8820. {"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}
  8821. {"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"}
  8822. {"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"}
  8823. {"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"}
  8824. {"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"}
  8825. {"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"}
  8826. {"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}
  8827. {"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"}
  8828. {"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"}
  8829. {"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"}
  8830. {"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"}
  8831. {"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"}
  8832. {"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}
  8833. {"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"}
  8834. {"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}
  8835. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter"}
  8836. {"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"}
  8837. {"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"}
  8838. {"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"}
  8839. {"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"}
  8840. {"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}
  8841. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay"}
  8842. {"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"}
  8843. {"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"}
  8844. {"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}
  8845. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation"}
  8846. {"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"}
  8847. {"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"}
  8848. {"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}
  8849. {"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"}
  8850. {"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"}
  8851. {"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"}
  8852. {"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}
  8853. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero"}
  8854. {"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"}
  8855. {"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"}
  8856. {"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}
  8857. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay"}
  8858. {"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"}
  8859. {"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"}
  8860. {"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}
  8861. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow"}
  8862. {"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"}
  8863. {"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"}
  8864. {"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}
  8865. {"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"}
  8866. {"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"}
  8867. {"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"}
  8868. {"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}
  8869. {"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"}
  8870. {"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"}
  8871. {"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"}
  8872. {"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}
  8873. {"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"}
  8874. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Elapsed":0}
  8875. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON"}
  8876. {"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"}
  8877. {"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"}
  8878. {"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"}
  8879. {"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"}
  8880. {"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}
  8881. {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE"}
  8882. {"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"}
  8883. {"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"}
  8884. {"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"}
  8885. {"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"}
  8886. {"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}
  8887. {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover"}
  8888. {"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"}
  8889. {"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"}
  8890. {"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"}
  8891. {"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"}
  8892. {"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"}
  8893. {"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"}
  8894. {"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"}
  8895. {"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}
  8896. {"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"}
  8897. {"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"}
  8898. {"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"}
  8899. {"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"}
  8900. {"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"}
  8901. {"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"}
  8902. {"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}
  8903. {"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"}
  8904. {"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"}
  8905. {"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"}
  8906. {"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"}
  8907. {"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"}
  8908. {"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"}
  8909. {"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}
  8910. {"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"}
  8911. {"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"}
  8912. {"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"}
  8913. {"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"}
  8914. {"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"}
  8915. {"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"}
  8916. {"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}
  8917. {"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"}
  8918. {"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"}
  8919. {"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"}
  8920. {"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"}
  8921. {"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"}
  8922. {"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"}
  8923. {"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}
  8924. {"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"}
  8925. {"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"}
  8926. {"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"}
  8927. {"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"}
  8928. {"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"}
  8929. {"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"}
  8930. {"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}
  8931. {"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"}
  8932. {"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"}
  8933. {"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"}
  8934. {"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"}
  8935. {"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"}
  8936. {"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"}
  8937. {"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}
  8938. {"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"}
  8939. {"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}
  8940. {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover"}
  8941. {"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"}
  8942. {"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"}
  8943. {"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"}
  8944. {"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"}
  8945. {"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"}
  8946. {"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"}
  8947. {"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}
  8948. {"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"}
  8949. {"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"}
  8950. {"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"}
  8951. {"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"}
  8952. {"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"}
  8953. {"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}
  8954. {"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"}
  8955. {"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"}
  8956. {"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"}
  8957. {"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"}
  8958. {"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"}
  8959. {"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}
  8960. {"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"}
  8961. {"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"}
  8962. {"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"}
  8963. {"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"}
  8964. {"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"}
  8965. {"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}
  8966. {"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"}
  8967. {"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"}
  8968. {"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"}
  8969. {"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"}
  8970. {"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"}
  8971. {"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}
  8972. {"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"}
  8973. {"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"}
  8974. {"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"}
  8975. {"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"}
  8976. {"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"}
  8977. {"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}
  8978. {"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"}
  8979. {"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"}
  8980. {"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"}
  8981. {"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"}
  8982. {"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"}
  8983. {"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}
  8984. {"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"}
  8985. {"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"}
  8986. {"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"}
  8987. {"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"}
  8988. {"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"}
  8989. {"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}
  8990. {"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"}
  8991. {"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"}
  8992. {"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"}
  8993. {"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"}
  8994. {"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"}
  8995. {"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}
  8996. {"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"}
  8997. {"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}
  8998. {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover"}
  8999. {"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"}
  9000. {"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"}
  9001. {"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"}
  9002. {"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"}
  9003. {"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}
  9004. {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount"}
  9005. {"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"}
  9006. {"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"}
  9007. {"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"}
  9008. {"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"}
  9009. {"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}
  9010. {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover"}
  9011. {"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"}
  9012. {"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"}
  9013. {"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"}
  9014. {"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"}
  9015. {"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"}
  9016. {"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"}
  9017. {"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"}
  9018. {"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}
  9019. {"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"}
  9020. {"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"}
  9021. {"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"}
  9022. {"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"}
  9023. {"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"}
  9024. {"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"}
  9025. {"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}
  9026. {"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"}
  9027. {"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}
  9028. {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover"}
  9029. {"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"}
  9030. {"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"}
  9031. {"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"}
  9032. {"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"}
  9033. {"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"}
  9034. {"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"}
  9035. {"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}
  9036. {"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"}
  9037. {"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"}
  9038. {"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"}
  9039. {"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"}
  9040. {"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"}
  9041. {"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}
  9042. {"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"}
  9043. {"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}
  9044. {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA"}
  9045. {"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"}
  9046. {"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"}
  9047. {"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"}
  9048. {"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"}
  9049. {"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}
  9050. {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified"}
  9051. {"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"}
  9052. {"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"}
  9053. {"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"}
  9054. {"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"}
  9055. {"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}
  9056. {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified"}
  9057. {"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"}
  9058. {"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"}
  9059. {"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"}
  9060. {"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"}
  9061. {"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}
  9062. {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey"}
  9063. {"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"}
  9064. {"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"}
  9065. {"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"}
  9066. {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
  9067. {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey"}
  9068. {"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"}
  9069. {"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"}
  9070. {"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"}
  9071. {"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"}
  9072. {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
  9073. {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata"}
  9074. {"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"}
  9075. {"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"}
  9076. {"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"}
  9077. {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Elapsed":0}
  9078. {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey"}
  9079. {"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"}
  9080. {"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"}
  9081. {"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"}
  9082. {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Elapsed":0}
  9083. {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient"}
  9084. {"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"}
  9085. {"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"}
  9086. {"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"}
  9087. {"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}
  9088. {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies"}
  9089. {"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"}
  9090. {"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"}
  9091. {"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"}
  9092. {"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"}
  9093. {"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"}
  9094. {"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"}
  9095. {"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"}
  9096. {"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}
  9097. {"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"}
  9098. {"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"}
  9099. {"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"}
  9100. {"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"}
  9101. {"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"}
  9102. {"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"}
  9103. {"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}
  9104. {"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"}
  9105. {"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"}
  9106. {"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"}
  9107. {"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"}
  9108. {"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"}
  9109. {"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"}
  9110. {"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}
  9111. {"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"}
  9112. {"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"}
  9113. {"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"}
  9114. {"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"}
  9115. {"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"}
  9116. {"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"}
  9117. {"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}
  9118. {"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"}
  9119. {"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}
  9120. {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs"}
  9121. {"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"}
  9122. {"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"}
  9123. {"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"}
  9124. {"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"}
  9125. {"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}
  9126. {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage"}
  9127. {"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"}
  9128. {"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"}
  9129. {"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"}
  9130. {"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"}
  9131. {"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"}
  9132. {"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}
  9133. {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint"}
  9134. {"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"}
  9135. {"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"}
  9136. {"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"}
  9137. {"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"}
  9138. {"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}
  9139. {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream"}
  9140. {"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"}
  9141. {"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"}
  9142. {"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"}
  9143. {"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"}
  9144. {"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"}
  9145. {"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}
  9146. {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone"}
  9147. {"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"}
  9148. {"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"}
  9149. {"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"}
  9150. {"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"}
  9151. {"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"}
  9152. {"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}
  9153. {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders"}
  9154. {"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"}
  9155. {"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"}
  9156. {"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"}
  9157. {"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"}
  9158. {"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"}
  9159. {"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}
  9160. {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured"}
  9161. {"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"}
  9162. {"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"}
  9163. {"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"}
  9164. {"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"}
  9165. {"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"}
  9166. {"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}
  9167. {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow"}
  9168. {"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"}
  9169. {"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"}
  9170. {"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}
  9171. {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken"}
  9172. {"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"}
  9173. {"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"}
  9174. {"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"}
  9175. {"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"}
  9176. {"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}
  9177. {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken"}
  9178. {"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"}
  9179. {"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"}
  9180. {"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}
  9181. {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken"}
  9182. {"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"}
  9183. {"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"}
  9184. {"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}
  9185. {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields"}
  9186. {"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"}
  9187. {"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"}
  9188. {"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}
  9189. {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError"}
  9190. {"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"}
  9191. {"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"}
  9192. {"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"}
  9193. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Elapsed":0}
  9194. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired"}
  9195. {"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"}
  9196. {"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"}
  9197. {"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}
  9198. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch"}
  9199. {"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"}
  9200. {"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"}
  9201. {"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}
  9202. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch"}
  9203. {"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"}
  9204. {"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"}
  9205. {"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}
  9206. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser"}
  9207. {"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"}
  9208. {"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"}
  9209. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Elapsed":0}
  9210. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields"}
  9211. {"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"}
  9212. {"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"}
  9213. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Elapsed":0}
  9214. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode"}
  9215. {"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"}
  9216. {"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"}
  9217. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Elapsed":0}
  9218. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput"}
  9219. {"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"}
  9220. {"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"}
  9221. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Elapsed":0}
  9222. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields"}
  9223. {"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"}
  9224. {"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"}
  9225. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Elapsed":0}
  9226. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs"}
  9227. {"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"}
  9228. {"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"}
  9229. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Elapsed":0}
  9230. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay"}
  9231. {"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"}
  9232. {"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"}
  9233. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Elapsed":0}
  9234. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode"}
  9235. {"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"}
  9236. {"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"}
  9237. {"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"}
  9238. {"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"}
  9239. {"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}
  9240. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins"}
  9241. {"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"}
  9242. {"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"}
  9243. {"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}
  9244. {"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"}
  9245. {"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"}
  9246. {"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"}
  9247. {"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}
  9248. {"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"}
  9249. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Elapsed":0}
  9250. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody"}
  9251. {"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"}
  9252. {"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"}
  9253. {"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"}
  9254. {"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"}
  9255. {"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}
  9256. {"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"}
  9257. {"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"}
  9258. {"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"}
  9259. {"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}
  9260. {"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"}
  9261. {"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"}
  9262. {"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"}
  9263. {"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}
  9264. {"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"}
  9265. {"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"}
  9266. {"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"}
  9267. {"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}
  9268. {"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"}
  9269. {"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"}
  9270. {"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"}
  9271. {"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}
  9272. {"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"}
  9273. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Elapsed":0}
  9274. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior"}
  9275. {"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"}
  9276. {"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"}
  9277. {"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"}
  9278. {"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"}
  9279. {"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}
  9280. {"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"}
  9281. {"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"}
  9282. {"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"}
  9283. {"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}
  9284. {"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"}
  9285. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Elapsed":0}
  9286. {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode"}
  9287. {"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"}
  9288. {"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"}
  9289. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Elapsed":0}
  9290. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode"}
  9291. {"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"}
  9292. {"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"}
  9293. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Elapsed":0}
  9294. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope"}
  9295. {"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"}
  9296. {"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"}
  9297. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Elapsed":0}
  9298. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas"}
  9299. {"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"}
  9300. {"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"}
  9301. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Elapsed":0}
  9302. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields"}
  9303. {"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"}
  9304. {"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"}
  9305. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Elapsed":0}
  9306. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema"}
  9307. {"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"}
  9308. {"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"}
  9309. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Elapsed":0}
  9310. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers"}
  9311. {"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"}
  9312. {"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"}
  9313. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Elapsed":0}
  9314. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues"}
  9315. {"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"}
  9316. {"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"}
  9317. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Elapsed":0}
  9318. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser"}
  9319. {"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"}
  9320. {"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"}
  9321. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Elapsed":0}
  9322. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray"}
  9323. {"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"}
  9324. {"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"}
  9325. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Elapsed":0}
  9326. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray"}
  9327. {"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"}
  9328. {"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"}
  9329. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Elapsed":0}
  9330. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray"}
  9331. {"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"}
  9332. {"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"}
  9333. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Elapsed":0}
  9334. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged"}
  9335. {"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"}
  9336. {"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"}
  9337. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Elapsed":0}
  9338. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason"}
  9339. {"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"}
  9340. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional"}
  9341. {"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"}
  9342. {"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"}
  9343. {"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}
  9344. {"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"}
  9345. {"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"}
  9346. {"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"}
  9347. {"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}
  9348. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected"}
  9349. {"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"}
  9350. {"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"}
  9351. {"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}
  9352. {"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"}
  9353. {"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"}
  9354. {"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"}
  9355. {"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}
  9356. {"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"}
  9357. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Elapsed":0}
  9358. {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker"}
  9359. {"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"}
  9360. {"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"}
  9361. {"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}
  9362. {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind"}
  9363. {"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"}
  9364. {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty"}
  9365. {"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"}
  9366. {"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"}
  9367. {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Elapsed":0}
  9368. {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id"}
  9369. {"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"}
  9370. {"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"}
  9371. {"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}
  9372. {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id"}
  9373. {"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"}
  9374. {"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"}
  9375. {"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}
  9376. {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id"}
  9377. {"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"}
  9378. {"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"}
  9379. {"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}
  9380. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown"}
  9381. {"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"}
  9382. {"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"}
  9383. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Elapsed":0}
  9384. {"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"}
  9385. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Elapsed":0}
  9386. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID"}
  9387. {"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"}
  9388. {"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"}
  9389. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Elapsed":0}
  9390. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt"}
  9391. {"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"}
  9392. {"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"}
  9393. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Elapsed":0}
  9394. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission"}
  9395. {"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"}
  9396. {"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"}
  9397. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Elapsed":0}
  9398. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate"}
  9399. {"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"}
  9400. {"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"}
  9401. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Elapsed":0}
  9402. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate"}
  9403. {"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"}
  9404. {"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"}
  9405. {"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"}
  9406. {"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"}
  9407. {"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}
  9408. {"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"}
  9409. {"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"}
  9410. {"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"}
  9411. {"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}
  9412. {"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"}
  9413. {"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"}
  9414. {"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"}
  9415. {"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}
  9416. {"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"}
  9417. {"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"}
  9418. {"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"}
  9419. {"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}
  9420. {"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"}
  9421. {"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"}
  9422. {"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"}
  9423. {"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}
  9424. {"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"}
  9425. {"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"}
  9426. {"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"}
  9427. {"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}
  9428. {"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"}
  9429. {"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"}
  9430. {"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"}
  9431. {"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}
  9432. {"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"}
  9433. {"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"}
  9434. {"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"}
  9435. {"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}
  9436. {"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"}
  9437. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Elapsed":0}
  9438. {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason"}
  9439. {"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"}
  9440. {"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"}
  9441. {"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"}
  9442. {"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"}
  9443. {"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}
  9444. {"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"}
  9445. {"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"}
  9446. {"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"}
  9447. {"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}
  9448. {"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"}
  9449. {"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"}
  9450. {"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"}
  9451. {"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}
  9452. {"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"}
  9453. {"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"}
  9454. {"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"}
  9455. {"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}
  9456. {"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"}
  9457. {"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"}
  9458. {"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"}
  9459. {"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"}
  9460. {"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}
  9461. {"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"}
  9462. {"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"}
  9463. {"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"}
  9464. {"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}
  9465. {"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"}
  9466. {"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"}
  9467. {"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"}
  9468. {"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}
  9469. {"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"}
  9470. {"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"}
  9471. {"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"}
  9472. {"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}
  9473. {"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"}
  9474. {"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"}
  9475. {"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"}
  9476. {"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}
  9477. {"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"}
  9478. {"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"}
  9479. {"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"}
  9480. {"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}
  9481. {"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"}
  9482. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Elapsed":0}
  9483. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset"}
  9484. {"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"}
  9485. {"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"}
  9486. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Elapsed":0}
  9487. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures"}
  9488. {"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"}
  9489. {"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"}
  9490. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Elapsed":0}
  9491. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled"}
  9492. {"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"}
  9493. {"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"}
  9494. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Elapsed":0}
  9495. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount"}
  9496. {"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"}
  9497. {"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"}
  9498. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Elapsed":0}
  9499. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext"}
  9500. {"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"}
  9501. {"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"}
  9502. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Elapsed":0}
  9503. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries"}
  9504. {"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"}
  9505. {"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"}
  9506. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Elapsed":0}
  9507. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra"}
  9508. {"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"}
  9509. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭"}
  9510. {"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"}
  9511. {"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"}
  9512. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Elapsed":0}
  9513. {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态"}
  9514. {"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"}
  9515. {"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"}
  9516. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Elapsed":0}
  9517. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验"}
  9518. {"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"}
  9519. {"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"}
  9520. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Elapsed":0}
  9521. {"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"}
  9522. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Elapsed":0}
  9523. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates"}
  9524. {"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"}
  9525. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询"}
  9526. {"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"}
  9527. {"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"}
  9528. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Elapsed":0}
  9529. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值"}
  9530. {"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"}
  9531. {"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"}
  9532. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Elapsed":0}
  9533. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度"}
  9534. {"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"}
  9535. {"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"}
  9536. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Elapsed":0}
  9537. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞"}
  9538. {"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"}
  9539. {"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"}
  9540. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Elapsed":0}
  9541. {"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"}
  9542. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Elapsed":0}
  9543. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed"}
  9544. {"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"}
  9545. {"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"}
  9546. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Elapsed":0}
  9547. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows"}
  9548. {"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"}
  9549. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h"}
  9550. {"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"}
  9551. {"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"}
  9552. {"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}
  9553. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d"}
  9554. {"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"}
  9555. {"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"}
  9556. {"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}
  9557. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发"}
  9558. {"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"}
  9559. {"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"}
  9560. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Elapsed":0}
  9561. {"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"}
  9562. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Elapsed":0}
  9563. {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce"}
  9564. {"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"}
  9565. {"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"}
  9566. {"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"}
  9567. {"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"}
  9568. {"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"}
  9569. {"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"}
  9570. {"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"}
  9571. {"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"}
  9572. {"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"}
  9573. {"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}
  9574. {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody"}
  9575. {"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"}
  9576. {"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"}
  9577. {"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"}
  9578. {"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"}
  9579. {"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"}
  9580. {"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"}
  9581. {"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"}
  9582. {"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"}
  9583. {"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"}
  9584. {"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"}
  9585. {"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"}
  9586. {"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"}
  9587. {"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"}
  9588. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Elapsed":0}
  9589. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder"}
  9590. {"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"}
  9591. {"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"}
  9592. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Elapsed":0}
  9593. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys"}
  9594. {"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"}
  9595. {"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"}
  9596. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Elapsed":0}
  9597. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage"}
  9598. {"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"}
  9599. {"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"}
  9600. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Elapsed":0}
  9601. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox"}
  9602. {"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"}
  9603. {"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"}
  9604. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Elapsed":0}
  9605. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers"}
  9606. {"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"}
  9607. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits"}
  9608. {"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"}
  9609. {"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"}
  9610. {"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}
  9611. {"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"}
  9612. {"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"}
  9613. {"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"}
  9614. {"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}
  9615. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items"}
  9616. {"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"}
  9617. {"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"}
  9618. {"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}
  9619. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data"}
  9620. {"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"}
  9621. {"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"}
  9622. {"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}
  9623. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array"}
  9624. {"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"}
  9625. {"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"}
  9626. {"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}
  9627. {"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"}
  9628. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Elapsed":0}
  9629. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates"}
  9630. {"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"}
  9631. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)"}
  9632. {"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"}
  9633. {"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"}
  9634. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Elapsed":0}
  9635. {"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_经原始模型推导保留"}
  9636. {"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"}
  9637. {"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"}
  9638. {"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}
  9639. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定"}
  9640. {"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"}
  9641. {"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"}
  9642. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Elapsed":0}
  9643. {"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"}
  9644. {"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"}
  9645. {"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"}
  9646. {"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}
  9647. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil"}
  9648. {"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"}
  9649. {"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"}
  9650. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Elapsed":0}
  9651. {"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"}
  9652. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Elapsed":0}
  9653. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates"}
  9654. {"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"}
  9655. {"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"}
  9656. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Elapsed":0}
  9657. {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel"}
  9658. {"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"}
  9659. {"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"}
  9660. {"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"}
  9661. {"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"}
  9662. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Elapsed":0}
  9663. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext"}
  9664. {"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"}
  9665. {"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"}
  9666. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Elapsed":0}
  9667. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy"}
  9668. {"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"}
  9669. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high"}
  9670. {"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"}
  9671. {"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"}
  9672. {"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}
  9673. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high"}
  9674. {"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"}
  9675. {"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"}
  9676. {"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}
  9677. {"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"}
  9678. {"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"}
  9679. {"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"}
  9680. {"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}
  9681. {"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"}
  9682. {"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"}
  9683. {"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"}
  9684. {"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}
  9685. {"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"}
  9686. {"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"}
  9687. {"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"}
  9688. {"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}
  9689. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value"}
  9690. {"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"}
  9691. {"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"}
  9692. {"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}
  9693. {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias"}
  9694. {"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"}
  9695. {"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"}
  9696. {"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}
  9697. {"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"}
  9698. {"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"}
  9699. {"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"}
  9700. {"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}
  9701. {"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"}
  9702. {"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"}
  9703. {"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"}
  9704. {"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}
  9705. {"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"}
  9706. {"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"}
  9707. {"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"}
  9708. {"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}
  9709. {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes"}
  9710. {"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"}
  9711. {"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"}
  9712. {"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}
  9713. {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap"}
  9714. {"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"}
  9715. {"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"}
  9716. {"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}
  9717. {"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"}
  9718. {"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"}
  9719. {"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"}
  9720. {"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}
  9721. {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none"}
  9722. {"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"}
  9723. {"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"}
  9724. {"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}
  9725. {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none"}
  9726. {"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"}
  9727. {"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"}
  9728. {"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}
  9729. {"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"}
  9730. {"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"}
  9731. {"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"}
  9732. {"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}
  9733. {"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"}
  9734. {"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"}
  9735. {"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"}
  9736. {"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}
  9737. {"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"}
  9738. {"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"}
  9739. {"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"}
  9740. {"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}
  9741. {"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"}
  9742. {"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"}
  9743. {"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"}
  9744. {"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}
  9745. {"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"}
  9746. {"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"}
  9747. {"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"}
  9748. {"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}
  9749. {"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"}
  9750. {"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"}
  9751. {"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"}
  9752. {"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}
  9753. {"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"}
  9754. {"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"}
  9755. {"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"}
  9756. {"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}
  9757. {"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"}
  9758. {"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"}
  9759. {"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"}
  9760. {"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}
  9761. {"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"}
  9762. {"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"}
  9763. {"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"}
  9764. {"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}
  9765. {"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"}
  9766. {"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"}
  9767. {"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"}
  9768. {"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}
  9769. {"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"}
  9770. {"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"}
  9771. {"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"}
  9772. {"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}
  9773. {"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"}
  9774. {"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"}
  9775. {"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"}
  9776. {"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}
  9777. {"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"}
  9778. {"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"}
  9779. {"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"}
  9780. {"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}
  9781. {"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"}
  9782. {"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"}
  9783. {"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"}
  9784. {"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}
  9785. {"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"}
  9786. {"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"}
  9787. {"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"}
  9788. {"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}
  9789. {"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"}
  9790. {"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"}
  9791. {"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"}
  9792. {"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}
  9793. {"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"}
  9794. {"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"}
  9795. {"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"}
  9796. {"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}
  9797. {"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"}
  9798. {"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"}
  9799. {"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"}
  9800. {"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}
  9801. {"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"}
  9802. {"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"}
  9803. {"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"}
  9804. {"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}
  9805. {"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"}
  9806. {"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"}
  9807. {"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"}
  9808. {"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}
  9809. {"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"}
  9810. {"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"}
  9811. {"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"}
  9812. {"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}
  9813. {"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"}
  9814. {"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"}
  9815. {"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"}
  9816. {"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}
  9817. {"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"}
  9818. {"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"}
  9819. {"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"}
  9820. {"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}
  9821. {"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"}
  9822. {"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"}
  9823. {"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"}
  9824. {"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}
  9825. {"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"}
  9826. {"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"}
  9827. {"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"}
  9828. {"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}
  9829. {"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"}
  9830. {"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"}
  9831. {"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"}
  9832. {"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}
  9833. {"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"}
  9834. {"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"}
  9835. {"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"}
  9836. {"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}
  9837. {"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"}
  9838. {"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"}
  9839. {"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"}
  9840. {"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}
  9841. {"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"}
  9842. {"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"}
  9843. {"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"}
  9844. {"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}
  9845. {"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"}
  9846. {"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"}
  9847. {"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"}
  9848. {"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}
  9849. {"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"}
  9850. {"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"}
  9851. {"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"}
  9852. {"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}
  9853. {"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"}
  9854. {"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"}
  9855. {"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"}
  9856. {"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}
  9857. {"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"}
  9858. {"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"}
  9859. {"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"}
  9860. {"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}
  9861. {"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"}
  9862. {"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"}
  9863. {"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"}
  9864. {"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}
  9865. {"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"}
  9866. {"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"}
  9867. {"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"}
  9868. {"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}
  9869. {"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"}
  9870. {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Elapsed":0}
  9871. {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite"}
  9872. {"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"}
  9873. {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses"}
  9874. {"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"}
  9875. {"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"}
  9876. {"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"}
  9877. {"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}
  9878. {"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"}
  9879. {"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"}
  9880. {"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"}
  9881. {"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"}
  9882. {"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"}
  9883. {"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}
  9884. {"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"}
  9885. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Elapsed":0}
  9886. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts"}
  9887. {"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"}
  9888. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false"}
  9889. {"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"}
  9890. {"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"}
  9891. {"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"}
  9892. {"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}
  9893. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true"}
  9894. {"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"}
  9895. {"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"}
  9896. {"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"}
  9897. {"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"}
  9898. {"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}
  9899. {"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"}
  9900. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Elapsed":0}
  9901. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly"}
  9902. {"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"}
  9903. {"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"}
  9904. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Elapsed":0}
  9905. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields"}
  9906. {"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"}
  9907. {"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"}
  9908. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Elapsed":0}
  9909. {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative"}
  9910. {"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"}
  9911. {"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"}
  9912. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Elapsed":0}
  9913. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands"}
  9914. {"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"}
  9915. {"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"}
  9916. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Elapsed":0}
  9917. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate"}
  9918. {"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"}
  9919. {"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"}
  9920. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Elapsed":0}
  9921. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands"}
  9922. {"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"}
  9923. {"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"}
  9924. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Elapsed":0}
  9925. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs"}
  9926. {"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"}
  9927. {"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"}
  9928. {"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"}
  9929. {"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"}
  9930. {"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}
  9931. {"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"}
  9932. {"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"}
  9933. {"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"}
  9934. {"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}
  9935. {"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"}
  9936. {"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"}
  9937. {"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"}
  9938. {"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}
  9939. {"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"}
  9940. {"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"}
  9941. {"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"}
  9942. {"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}
  9943. {"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"}
  9944. {"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"}
  9945. {"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"}
  9946. {"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}
  9947. {"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"}
  9948. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Elapsed":0}
  9949. {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated"}
  9950. {"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"}
  9951. {"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"}
  9952. {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Elapsed":0.02}
  9953. {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation"}
  9954. {"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"}
  9955. {"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"}
  9956. {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Elapsed":0}
  9957. {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse"}
  9958. {"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"}
  9959. {"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"}
  9960. {"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"}
  9961. {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Elapsed":0}
  9962. {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream"}
  9963. {"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"}
  9964. {"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"}
  9965. {"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"}
  9966. {"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}
  9967. {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts"}
  9968. {"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"}
  9969. {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123"}
  9970. {"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"}
  9971. {"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"}
  9972. {"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}
  9973. {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123"}
  9974. {"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"}
  9975. {"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"}
  9976. {"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}
  9977. {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123"}
  9978. {"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"}
  9979. {"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"}
  9980. {"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}
  9981. {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123"}
  9982. {"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"}
  9983. {"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"}
  9984. {"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}
  9985. {"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"}
  9986. {"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"}
  9987. {"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"}
  9988. {"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}
  9989. {"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"}
  9990. {"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"}
  9991. {"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"}
  9992. {"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}
  9993. {"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"}
  9994. {"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"}
  9995. {"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"}
  9996. {"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}
  9997. {"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"}
  9998. {"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"}
  9999. {"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"}
  10000. {"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}
  10001. {"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"}
  10002. {"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"}
  10003. {"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"}
  10004. {"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}
  10005. {"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"}
  10006. {"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"}
  10007. {"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"}
  10008. {"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}
  10009. {"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"}
  10010. {"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"}
  10011. {"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"}
  10012. {"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}
  10013. {"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"}
  10014. {"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"}
  10015. {"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"}
  10016. {"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}
  10017. {"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"}
  10018. {"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"}
  10019. {"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"}
  10020. {"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}
  10021. {"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"}
  10022. {"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"}
  10023. {"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"}
  10024. {"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}
  10025. {"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"}
  10026. {"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"}
  10027. {"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"}
  10028. {"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}
  10029. {"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"}
  10030. {"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"}
  10031. {"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"}
  10032. {"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}
  10033. {"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"}
  10034. {"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"}
  10035. {"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"}
  10036. {"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}
  10037. {"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"}
  10038. {"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"}
  10039. {"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"}
  10040. {"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}
  10041. {"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"}
  10042. {"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"}
  10043. {"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"}
  10044. {"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}
  10045. {"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"}
  10046. {"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"}
  10047. {"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"}
  10048. {"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}
  10049. {"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"}
  10050. {"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"}
  10051. {"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"}
  10052. {"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}
  10053. {"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"}
  10054. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Elapsed":0}
  10055. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces"}
  10056. {"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"}
  10057. {"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"}
  10058. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Elapsed":0}
  10059. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched"}
  10060. {"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"}
  10061. {"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"}
  10062. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Elapsed":0}
  10063. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID"}
  10064. {"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"}
  10065. {"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"}
  10066. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Elapsed":0}
  10067. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences"}
  10068. {"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"}
  10069. {"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"}
  10070. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Elapsed":0}
  10071. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly"}
  10072. {"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"}
  10073. {"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"}
  10074. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Elapsed":0}
  10075. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs"}
  10076. {"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"}
  10077. {"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"}
  10078. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Elapsed":0}
  10079. {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools"}
  10080. {"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"}
  10081. {"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"}
  10082. {"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"}
  10083. {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Elapsed":0}
  10084. {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls"}
  10085. {"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"}
  10086. {"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"}
  10087. {"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"}
  10088. {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Elapsed":0}
  10089. {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening"}
  10090. {"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"}
  10091. {"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"}
  10092. {"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"}
  10093. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Elapsed":0}
  10094. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior"}
  10095. {"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"}
  10096. {"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"}
  10097. {"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"}
  10098. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Elapsed":0}
  10099. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames"}
  10100. {"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"}
  10101. {"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"}
  10102. {"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"}
  10103. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Elapsed":0}
  10104. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces"}
  10105. {"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"}
  10106. {"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"}
  10107. {"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"}
  10108. {"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"}
  10109. {"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}
  10110. {"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"}
  10111. {"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"}
  10112. {"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"}
  10113. {"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}
  10114. {"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"}
  10115. {"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"}
  10116. {"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"}
  10117. {"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}
  10118. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens"}
  10119. {"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"}
  10120. {"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"}
  10121. {"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}
  10122. {"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"}
  10123. {"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"}
  10124. {"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"}
  10125. {"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}
  10126. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact"}
  10127. {"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"}
  10128. {"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"}
  10129. {"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}
  10130. {"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"}
  10131. {"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"}
  10132. {"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"}
  10133. {"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}
  10134. {"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"}
  10135. {"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"}
  10136. {"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"}
  10137. {"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}
  10138. {"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"}
  10139. {"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"}
  10140. {"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"}
  10141. {"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}
  10142. {"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"}
  10143. {"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"}
  10144. {"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"}
  10145. {"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}
  10146. {"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"}
  10147. {"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"}
  10148. {"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"}
  10149. {"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}
  10150. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http"}
  10151. {"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"}
  10152. {"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"}
  10153. {"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}
  10154. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http"}
  10155. {"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"}
  10156. {"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"}
  10157. {"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}
  10158. {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account"}
  10159. {"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"}
  10160. {"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"}
  10161. {"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}
  10162. {"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"}
  10163. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Elapsed":0}
  10164. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces"}
  10165. {"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"}
  10166. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps"}
  10167. {"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"}
  10168. {"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"}
  10169. {"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}
  10170. {"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"}
  10171. {"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"}
  10172. {"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"}
  10173. {"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}
  10174. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips"}
  10175. {"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"}
  10176. {"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"}
  10177. {"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}
  10178. {"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"}
  10179. {"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"}
  10180. {"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"}
  10181. {"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}
  10182. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps"}
  10183. {"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"}
  10184. {"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"}
  10185. {"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}
  10186. {"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"}
  10187. {"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"}
  10188. {"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"}
  10189. {"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}
  10190. {"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"}
  10191. {"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"}
  10192. {"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"}
  10193. {"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}
  10194. {"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"}
  10195. {"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"}
  10196. {"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"}
  10197. {"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}
  10198. {"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"}
  10199. {"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"}
  10200. {"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"}
  10201. {"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}
  10202. {"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"}
  10203. {"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"}
  10204. {"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"}
  10205. {"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}
  10206. {"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"}
  10207. {"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"}
  10208. {"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"}
  10209. {"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}
  10210. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps"}
  10211. {"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"}
  10212. {"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"}
  10213. {"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}
  10214. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account"}
  10215. {"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"}
  10216. {"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"}
  10217. {"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}
  10218. {"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"}
  10219. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Elapsed":0}
  10220. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces"}
  10221. {"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"}
  10222. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http"}
  10223. {"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"}
  10224. {"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"}
  10225. {"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}
  10226. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http"}
  10227. {"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"}
  10228. {"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"}
  10229. {"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}
  10230. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2"}
  10231. {"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"}
  10232. {"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"}
  10233. {"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}
  10234. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2"}
  10235. {"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"}
  10236. {"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"}
  10237. {"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}
  10238. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough"}
  10239. {"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"}
  10240. {"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"}
  10241. {"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}
  10242. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough"}
  10243. {"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"}
  10244. {"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"}
  10245. {"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}
  10246. {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http"}
  10247. {"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"}
  10248. {"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"}
  10249. {"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}
  10250. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http"}
  10251. {"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"}
  10252. {"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"}
  10253. {"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}
  10254. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account"}
  10255. {"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"}
  10256. {"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"}
  10257. {"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}
  10258. {"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"}
  10259. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Elapsed":0}
  10260. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces"}
  10261. {"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"}
  10262. {"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"}
  10263. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Elapsed":0}
  10264. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact"}
  10265. {"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"}
  10266. {"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"}
  10267. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Elapsed":0}
  10268. {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces"}
  10269. {"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"}
  10270. {"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"}
  10271. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Elapsed":0}
  10272. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap"}
  10273. {"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"}
  10274. {"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"}
  10275. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Elapsed":0}
  10276. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts"}
  10277. {"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"}
  10278. {"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"}
  10279. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Elapsed":0}
  10280. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts"}
  10281. {"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"}
  10282. {"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"}
  10283. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Elapsed":0}
  10284. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors"}
  10285. {"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"}
  10286. {"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"}
  10287. {"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"}
  10288. {"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"}
  10289. {"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}
  10290. {"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"}
  10291. {"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"}
  10292. {"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"}
  10293. {"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}
  10294. {"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"}
  10295. {"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"}
  10296. {"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"}
  10297. {"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}
  10298. {"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"}
  10299. {"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"}
  10300. {"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"}
  10301. {"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}
  10302. {"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"}
  10303. {"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"}
  10304. {"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"}
  10305. {"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}
  10306. {"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"}
  10307. {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Elapsed":0}
  10308. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType"}
  10309. {"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"}
  10310. {"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"}
  10311. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Elapsed":0}
  10312. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType"}
  10313. {"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"}
  10314. {"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"}
  10315. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Elapsed":0}
  10316. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage"}
  10317. {"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"}
  10318. {"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"}
  10319. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Elapsed":0}
  10320. {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase"}
  10321. {"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"}
  10322. {"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"}
  10323. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Elapsed":0}
  10324. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection"}
  10325. {"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"}
  10326. {"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"}
  10327. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Elapsed":0}
  10328. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase"}
  10329. {"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"}
  10330. {"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"}
  10331. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Elapsed":0}
  10332. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus"}
  10333. {"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"}
  10334. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param"}
  10335. {"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"}
  10336. {"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"}
  10337. {"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}
  10338. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param"}
  10339. {"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"}
  10340. {"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"}
  10341. {"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}
  10342. {"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"}
  10343. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Elapsed":0}
  10344. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent"}
  10345. {"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"}
  10346. {"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"}
  10347. {"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"}
  10348. {"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"}
  10349. {"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}
  10350. {"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"}
  10351. {"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"}
  10352. {"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"}
  10353. {"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}
  10354. {"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"}
  10355. {"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"}
  10356. {"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"}
  10357. {"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}
  10358. {"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"}
  10359. {"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"}
  10360. {"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"}
  10361. {"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}
  10362. {"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"}
  10363. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Elapsed":0}
  10364. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero"}
  10365. {"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"}
  10366. {"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"}
  10367. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Elapsed":0}
  10368. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations"}
  10369. {"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"}
  10370. {"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"}
  10371. {"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"}
  10372. {"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"}
  10373. {"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}
  10374. {"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"}
  10375. {"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"}
  10376. {"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"}
  10377. {"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}
  10378. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code"}
  10379. {"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"}
  10380. {"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"}
  10381. {"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}
  10382. {"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"}
  10383. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Elapsed":0}
  10384. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation"}
  10385. {"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"}
  10386. {"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"}
  10387. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Elapsed":0}
  10388. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation"}
  10389. {"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"}
  10390. {"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"}
  10391. {"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"}
  10392. {"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"}
  10393. {"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"}
  10394. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Elapsed":0}
  10395. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations"}
  10396. {"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"}
  10397. {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path"}
  10398. {"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"}
  10399. {"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"}
  10400. {"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}
  10401. {"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"}
  10402. {"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"}
  10403. {"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"}
  10404. {"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}
  10405. {"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"}
  10406. {"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"}
  10407. {"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"}
  10408. {"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}
  10409. {"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"}
  10410. {"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"}
  10411. {"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"}
  10412. {"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}
  10413. {"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"}
  10414. {"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"}
  10415. {"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"}
  10416. {"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}
  10417. {"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"}
  10418. {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Elapsed":0}
  10419. {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus"}
  10420. {"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"}
  10421. {"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"}
  10422. {"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"}
  10423. {"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"}
  10424. {"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"}
  10425. {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Elapsed":0}
  10426. {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent"}
  10427. {"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"}
  10428. {"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"}
  10429. {"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"}
  10430. {"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"}
  10431. {"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"}
  10432. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Elapsed":0}
  10433. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint"}
  10434. {"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"}
  10435. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level"}
  10436. {"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"}
  10437. {"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"}
  10438. {"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}
  10439. {"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"}
  10440. {"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"}
  10441. {"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"}
  10442. {"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}
  10443. {"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"}
  10444. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Elapsed":0}
  10445. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors"}
  10446. {"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"}
  10447. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees"}
  10448. {"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"}
  10449. {"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"}
  10450. {"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}
  10451. {"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"}
  10452. {"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"}
  10453. {"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"}
  10454. {"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}
  10455. {"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"}
  10456. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Elapsed":0}
  10457. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal"}
  10458. {"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"}
  10459. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code"}
  10460. {"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"}
  10461. {"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"}
  10462. {"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}
  10463. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message"}
  10464. {"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"}
  10465. {"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"}
  10466. {"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}
  10467. {"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"}
  10468. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Elapsed":0}
  10469. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce"}
  10470. {"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"}
  10471. {"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"}
  10472. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Elapsed":0}
  10473. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward"}
  10474. {"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"}
  10475. {"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"}
  10476. {"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"}
  10477. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Elapsed":0}
  10478. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent"}
  10479. {"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"}
  10480. {"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"}
  10481. {"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"}
  10482. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Elapsed":0}
  10483. {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward"}
  10484. {"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"}
  10485. {"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"}
  10486. {"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"}
  10487. {"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"}
  10488. {"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"}
  10489. {"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}
  10490. {"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"}
  10491. {"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"}
  10492. {"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"}
  10493. {"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"}
  10494. {"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}
  10495. {"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"}
  10496. {"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"}
  10497. {"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"}
  10498. {"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"}
  10499. {"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}
  10500. {"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"}
  10501. {"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"}
  10502. {"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"}
  10503. {"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"}
  10504. {"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}
  10505. {"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"}
  10506. {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Elapsed":0}
  10507. {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection"}
  10508. {"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"}
  10509. {"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"}
  10510. {"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"}
  10511. {"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"}
  10512. {"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"}
  10513. {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Elapsed":0}
  10514. {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry"}
  10515. {"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"}
  10516. {"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"}
  10517. {"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"}
  10518. {"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"}
  10519. {"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"}
  10520. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Elapsed":0}
  10521. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType"}
  10522. {"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"}
  10523. {"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"}
  10524. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Elapsed":0}
  10525. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly"}
  10526. {"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"}
  10527. {"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"}
  10528. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Elapsed":0}
  10529. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool"}
  10530. {"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"}
  10531. {"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"}
  10532. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Elapsed":0}
  10533. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched"}
  10534. {"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"}
  10535. {"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"}
  10536. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Elapsed":0}
  10537. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented"}
  10538. {"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"}
  10539. {"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"}
  10540. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Elapsed":0}
  10541. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion"}
  10542. {"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"}
  10543. {"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"}
  10544. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Elapsed":0}
  10545. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword"}
  10546. {"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"}
  10547. {"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"}
  10548. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Elapsed":0}
  10549. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary"}
  10550. {"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"}
  10551. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union"}
  10552. {"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"}
  10553. {"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"}
  10554. {"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}
  10555. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch"}
  10556. {"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"}
  10557. {"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"}
  10558. {"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}
  10559. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union"}
  10560. {"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"}
  10561. {"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"}
  10562. {"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}
  10563. {"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"}
  10564. {"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"}
  10565. {"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"}
  10566. {"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}
  10567. {"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"}
  10568. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Elapsed":0}
  10569. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools"}
  10570. {"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"}
  10571. {"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"}
  10572. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Elapsed":0}
  10573. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape"}
  10574. {"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"}
  10575. {"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"}
  10576. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Elapsed":0}
  10577. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes"}
  10578. {"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"}
  10579. {"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"}
  10580. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Elapsed":0}
  10581. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools"}
  10582. {"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"}
  10583. {"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"}
  10584. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Elapsed":0}
  10585. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes"}
  10586. {"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"}
  10587. {"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"}
  10588. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Elapsed":0}
  10589. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey"}
  10590. {"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"}
  10591. {"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"}
  10592. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Elapsed":0}
  10593. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp"}
  10594. {"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"}
  10595. {"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"}
  10596. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Elapsed":0}
  10597. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON"}
  10598. {"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"}
  10599. {"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"}
  10600. {"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"}
  10601. {"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"}
  10602. {"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}
  10603. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing"}
  10604. {"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"}
  10605. {"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"}
  10606. {"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}
  10607. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8"}
  10608. {"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"}
  10609. {"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"}
  10610. {"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}
  10611. {"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"}
  10612. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Elapsed":0}
  10613. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary"}
  10614. {"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"}
  10615. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai"}
  10616. {"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"}
  10617. {"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"}
  10618. {"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}
  10619. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic"}
  10620. {"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"}
  10621. {"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"}
  10622. {"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}
  10623. {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi"}
  10624. {"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"}
  10625. {"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"}
  10626. {"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}
  10627. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu"}
  10628. {"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"}
  10629. {"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"}
  10630. {"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}
  10631. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek"}
  10632. {"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"}
  10633. {"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"}
  10634. {"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}
  10635. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok"}
  10636. {"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"}
  10637. {"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"}
  10638. {"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}
  10639. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini"}
  10640. {"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"}
  10641. {"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"}
  10642. {"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}
  10643. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity"}
  10644. {"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"}
  10645. {"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"}
  10646. {"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}
  10647. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite"}
  10648. {"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"}
  10649. {"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"}
  10650. {"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}
  10651. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00"}
  10652. {"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"}
  10653. {"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"}
  10654. {"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}
  10655. {"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"}
  10656. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Elapsed":0}
  10657. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary"}
  10658. {"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"}
  10659. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic"}
  10660. {"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"}
  10661. {"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"}
  10662. {"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}
  10663. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok"}
  10664. {"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"}
  10665. {"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"}
  10666. {"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}
  10667. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi"}
  10668. {"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"}
  10669. {"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"}
  10670. {"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}
  10671. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu"}
  10672. {"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"}
  10673. {"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"}
  10674. {"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}
  10675. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek"}
  10676. {"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"}
  10677. {"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"}
  10678. {"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}
  10679. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax"}
  10680. {"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"}
  10681. {"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"}
  10682. {"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}
  10683. {"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"}
  10684. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Elapsed":0}
  10685. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion"}
  10686. {"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"}
  10687. {"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"}
  10688. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Elapsed":0}
  10689. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten"}
  10690. {"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"}
  10691. {"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"}
  10692. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Elapsed":0}
  10693. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps"}
  10694. {"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"}
  10695. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body"}
  10696. {"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"}
  10697. {"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"}
  10698. {"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}
  10699. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools"}
  10700. {"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"}
  10701. {"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"}
  10702. {"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}
  10703. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null"}
  10704. {"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"}
  10705. {"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"}
  10706. {"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}
  10707. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object"}
  10708. {"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"}
  10709. {"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"}
  10710. {"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}
  10711. {"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"}
  10712. {"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"}
  10713. {"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"}
  10714. {"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}
  10715. {"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"}
  10716. {"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"}
  10717. {"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"}
  10718. {"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}
  10719. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null"}
  10720. {"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"}
  10721. {"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"}
  10722. {"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}
  10723. {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string"}
  10724. {"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"}
  10725. {"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"}
  10726. {"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}
  10727. {"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"}
  10728. {"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"}
  10729. {"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"}
  10730. {"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}
  10731. {"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"}
  10732. {"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"}
  10733. {"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"}
  10734. {"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}
  10735. {"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"}
  10736. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Elapsed":0}
  10737. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard"}
  10738. {"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"}
  10739. {"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"}
  10740. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Elapsed":0}
  10741. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON"}
  10742. {"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"}
  10743. {"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"}
  10744. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Elapsed":0}
  10745. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody"}
  10746. {"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"}
  10747. {"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"}
  10748. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Elapsed":0}
  10749. {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly"}
  10750. {"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"}
  10751. {"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"}
  10752. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Elapsed":0}
  10753. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation"}
  10754. {"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"}
  10755. {"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"}
  10756. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Elapsed":0}
  10757. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions"}
  10758. {"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"}
  10759. {"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"}
  10760. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Elapsed":0}
  10761. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords"}
  10762. {"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"}
  10763. {"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"}
  10764. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Elapsed":0}
  10765. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata"}
  10766. {"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"}
  10767. {"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"}
  10768. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Elapsed":0}
  10769. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround"}
  10770. {"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"}
  10771. {"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"}
  10772. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Elapsed":0}
  10773. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey"}
  10774. {"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"}
  10775. {"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"}
  10776. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Elapsed":0}
  10777. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid"}
  10778. {"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"}
  10779. {"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"}
  10780. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Elapsed":0}
  10781. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth"}
  10782. {"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"}
  10783. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey"}
  10784. {"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"}
  10785. {"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"}
  10786. {"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}
  10787. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth"}
  10788. {"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"}
  10789. {"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"}
  10790. {"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}
  10791. {"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"}
  10792. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Elapsed":0}
  10793. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal"}
  10794. {"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"}
  10795. {"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"}
  10796. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Elapsed":0}
  10797. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern"}
  10798. {"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"}
  10799. {"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"}
  10800. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Elapsed":0}
  10801. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData"}
  10802. {"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"}
  10803. {"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"}
  10804. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Elapsed":0}
  10805. {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits"}
  10806. {"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"}
  10807. {"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"}
  10808. {"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}
  10809. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers"}
  10810. {"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"}
  10811. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias"}
  10812. {"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"}
  10813. {"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"}
  10814. {"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}
  10815. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority"}
  10816. {"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"}
  10817. {"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"}
  10818. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Elapsed":0}
  10819. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex"}
  10820. {"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"}
  10821. {"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"}
  10822. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Elapsed":0}
  10823. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast"}
  10824. {"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"}
  10825. {"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"}
  10826. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Elapsed":0}
  10827. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel"}
  10828. {"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"}
  10829. {"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"}
  10830. {"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}
  10831. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier"}
  10832. {"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"}
  10833. {"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"}
  10834. {"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}
  10835. {"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"}
  10836. {"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"}
  10837. {"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"}
  10838. {"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}
  10839. {"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"}
  10840. {"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"}
  10841. {"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"}
  10842. {"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}
  10843. {"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"}
  10844. {"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"}
  10845. {"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"}
  10846. {"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}
  10847. {"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"}
  10848. {"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"}
  10849. {"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"}
  10850. {"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}
  10851. {"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"}
  10852. {"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"}
  10853. {"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"}
  10854. {"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}
  10855. {"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"}
  10856. {"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"}
  10857. {"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"}
  10858. {"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}
  10859. {"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"}
  10860. {"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"}
  10861. {"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"}
  10862. {"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}
  10863. {"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"}
  10864. {"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"}
  10865. {"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"}
  10866. {"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}
  10867. {"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"}
  10868. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Elapsed":0}
  10869. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody"}
  10870. {"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"}
  10871. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast"}
  10872. {"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"}
  10873. {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary"}
  10874. {"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"}
  10875. {"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"}
  10876. {"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"}
  10877. {"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}
  10878. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough"}
  10879. {"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"}
  10880. {"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"}
  10881. {"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"}
  10882. {"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}
  10883. {"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"}
  10884. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Elapsed":0}
  10885. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex"}
  10886. {"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"}
  10887. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary"}
  10888. {"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"}
  10889. {"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"}
  10890. {"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"}
  10891. {"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}
  10892. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough"}
  10893. {"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"}
  10894. {"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"}
  10895. {"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"}
  10896. {"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}
  10897. {"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"}
  10898. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Elapsed":0}
  10899. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast"}
  10900. {"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"}
  10901. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary"}
  10902. {"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"}
  10903. {"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"}
  10904. {"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"}
  10905. {"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}
  10906. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough"}
  10907. {"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"}
  10908. {"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"}
  10909. {"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"}
  10910. {"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}
  10911. {"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"}
  10912. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Elapsed":0}
  10913. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default"}
  10914. {"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"}
  10915. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary"}
  10916. {"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"}
  10917. {"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"}
  10918. {"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"}
  10919. {"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}
  10920. {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough"}
  10921. {"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"}
  10922. {"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"}
  10923. {"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"}
  10924. {"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}
  10925. {"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"}
  10926. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Elapsed":0}
  10927. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted"}
  10928. {"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"}
  10929. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary"}
  10930. {"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"}
  10931. {"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"}
  10932. {"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"}
  10933. {"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}
  10934. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough"}
  10935. {"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"}
  10936. {"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"}
  10937. {"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"}
  10938. {"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}
  10939. {"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"}
  10940. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Elapsed":0}
  10941. {"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"}
  10942. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Elapsed":0}
  10943. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta"}
  10944. {"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"}
  10945. {"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"}
  10946. {"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"}
  10947. {"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"}
  10948. {"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"}
  10949. {"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}
  10950. {"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"}
  10951. {"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"}
  10952. {"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"}
  10953. {"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"}
  10954. {"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}
  10955. {"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"}
  10956. {"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"}
  10957. {"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"}
  10958. {"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"}
  10959. {"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}
  10960. {"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"}
  10961. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Elapsed":0}
  10962. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly"}
  10963. {"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"}
  10964. {"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"}
  10965. {"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"}
  10966. {"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"}
  10967. {"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"}
  10968. {"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"}
  10969. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Elapsed":0}
  10970. {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly"}
  10971. {"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"}
  10972. {"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"}
  10973. {"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"}
  10974. {"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"}
  10975. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Elapsed":0}
  10976. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges"}
  10977. {"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"}
  10978. {"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"}
  10979. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Elapsed":0}
  10980. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity"}
  10981. {"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"}
  10982. {"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"}
  10983. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Elapsed":0}
  10984. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike"}
  10985. {"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"}
  10986. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth"}
  10987. {"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"}
  10988. {"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"}
  10989. {"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}
  10990. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token"}
  10991. {"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"}
  10992. {"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"}
  10993. {"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}
  10994. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key"}
  10995. {"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"}
  10996. {"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"}
  10997. {"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}
  10998. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token"}
  10999. {"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"}
  11000. {"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"}
  11001. {"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}
  11002. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token"}
  11003. {"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"}
  11004. {"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"}
  11005. {"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}
  11006. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil"}
  11007. {"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"}
  11008. {"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"}
  11009. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Elapsed":0}
  11010. {"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"}
  11011. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Elapsed":0}
  11012. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken"}
  11013. {"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"}
  11014. {"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"}
  11015. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Elapsed":0}
  11016. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath"}
  11017. {"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"}
  11018. {"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"}
  11019. {"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"}
  11020. {"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"}
  11021. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Elapsed":0}
  11022. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility"}
  11023. {"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"}
  11024. {"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"}
  11025. {"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"}
  11026. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Elapsed":0}
  11027. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform"}
  11028. {"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"}
  11029. {"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"}
  11030. {"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"}
  11031. {"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"}
  11032. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Elapsed":0}
  11033. {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState"}
  11034. {"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"}
  11035. {"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"}
  11036. {"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"}
  11037. {"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"}
  11038. {"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"}
  11039. {"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"}
  11040. {"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"}
  11041. {"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"}
  11042. {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Elapsed":0}
  11043. {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine"}
  11044. {"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"}
  11045. {"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"}
  11046. {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0}
  11047. {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine"}
  11048. {"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"}
  11049. {"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"}
  11050. {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0}
  11051. {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine"}
  11052. {"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"}
  11053. {"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"}
  11054. {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0}
  11055. {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage"}
  11056. {"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"}
  11057. {"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"}
  11058. {"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"}
  11059. {"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"}
  11060. {"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"}
  11061. {"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"}
  11062. {"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"}
  11063. {"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"}
  11064. {"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"}
  11065. {"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"}
  11066. {"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"}
  11067. {"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"}
  11068. {"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"}
  11069. {"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"}
  11070. {"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"}
  11071. {"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"}
  11072. {"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"}
  11073. {"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"}
  11074. {"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"}
  11075. {"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"}
  11076. {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Elapsed":0}
  11077. {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream"}
  11078. {"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"}
  11079. {"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"}
  11080. {"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"}
  11081. {"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"}
  11082. {"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"}
  11083. {"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"}
  11084. {"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"}
  11085. {"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"}
  11086. {"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"}
  11087. {"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"}
  11088. {"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"}
  11089. {"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"}
  11090. {"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"}
  11091. {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Elapsed":0.01}
  11092. {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream"}
  11093. {"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"}
  11094. {"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"}
  11095. {"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"}
  11096. {"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"}
  11097. {"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"}
  11098. {"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"}
  11099. {"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"}
  11100. {"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"}
  11101. {"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"}
  11102. {"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"}
  11103. {"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"}
  11104. {"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"}
  11105. {"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"}
  11106. {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Elapsed":0}
  11107. {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream"}
  11108. {"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"}
  11109. {"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"}
  11110. {"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"}
  11111. {"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"}
  11112. {"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"}
  11113. {"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"}
  11114. {"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"}
  11115. {"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"}
  11116. {"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"}
  11117. {"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"}
  11118. {"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"}
  11119. {"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"}
  11120. {"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"}
  11121. {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Elapsed":0}
  11122. {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit"}
  11123. {"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"}
  11124. {"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"}
  11125. {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Elapsed":0.09}
  11126. {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument"}
  11127. {"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"}
  11128. {"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"}
  11129. {"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"}
  11130. {"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"}
  11131. {"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"}
  11132. {"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"}
  11133. {"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"}
  11134. {"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"}
  11135. {"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"}
  11136. {"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"}
  11137. {"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"}
  11138. {"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"}
  11139. {"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"}
  11140. {"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"}
  11141. {"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"}
  11142. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Elapsed":0}
  11143. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics"}
  11144. {"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"}
  11145. {"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"}
  11146. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Elapsed":0}
  11147. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope"}
  11148. {"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"}
  11149. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key"}
  11150. {"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"}
  11151. {"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"}
  11152. {"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}
  11153. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider"}
  11154. {"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"}
  11155. {"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"}
  11156. {"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}
  11157. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account"}
  11158. {"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"}
  11159. {"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"}
  11160. {"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}
  11161. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account"}
  11162. {"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"}
  11163. {"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"}
  11164. {"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}
  11165. {"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"}
  11166. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Elapsed":0}
  11167. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal"}
  11168. {"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"}
  11169. {"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"}
  11170. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Elapsed":0}
  11171. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible"}
  11172. {"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"}
  11173. {"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"}
  11174. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Elapsed":0}
  11175. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError"}
  11176. {"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"}
  11177. {"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"}
  11178. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Elapsed":0}
  11179. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape"}
  11180. {"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"}
  11181. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata"}
  11182. {"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"}
  11183. {"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"}
  11184. {"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}
  11185. {"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"}
  11186. {"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"}
  11187. {"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"}
  11188. {"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}
  11189. {"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"}
  11190. {"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"}
  11191. {"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"}
  11192. {"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}
  11193. {"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"}
  11194. {"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"}
  11195. {"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"}
  11196. {"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}
  11197. {"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"}
  11198. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Elapsed":0}
  11199. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification"}
  11200. {"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"}
  11201. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive"}
  11202. {"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"}
  11203. {"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"}
  11204. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Elapsed":0}
  11205. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created"}
  11206. {"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"}
  11207. {"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"}
  11208. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Elapsed":0}
  11209. {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item"}
  11210. {"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"}
  11211. {"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"}
  11212. {"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}
  11213. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta"}
  11214. {"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"}
  11215. {"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"}
  11216. {"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}
  11217. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta"}
  11218. {"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"}
  11219. {"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"}
  11220. {"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}
  11221. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments"}
  11222. {"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"}
  11223. {"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"}
  11224. {"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}
  11225. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image"}
  11226. {"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"}
  11227. {"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"}
  11228. {"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}
  11229. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item"}
  11230. {"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"}
  11231. {"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"}
  11232. {"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}
  11233. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed"}
  11234. {"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"}
  11235. {"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"}
  11236. {"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}
  11237. {"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"}
  11238. {"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"}
  11239. {"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"}
  11240. {"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}
  11241. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text"}
  11242. {"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"}
  11243. {"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"}
  11244. {"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}
  11245. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker"}
  11246. {"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"}
  11247. {"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"}
  11248. {"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}
  11249. {"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"}
  11250. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Elapsed":0}
  11251. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput"}
  11252. {"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"}
  11253. {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native"}
  11254. {"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"}
  11255. {"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"}
  11256. {"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}
  11257. {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough"}
  11258. {"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"}
  11259. {"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"}
  11260. {"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}
  11261. {"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"}
  11262. {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Elapsed":0.25}
  11263. {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage"}
  11264. {"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"}
  11265. {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native"}
  11266. {"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"}
  11267. {"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"}
  11268. {"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}
  11269. {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough"}
  11270. {"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"}
  11271. {"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"}
  11272. {"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}
  11273. {"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"}
  11274. {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Elapsed":0.24}
  11275. {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout"}
  11276. {"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"}
  11277. {"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"}
  11278. {"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"}
  11279. {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Elapsed":1.2}
  11280. {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput"}
  11281. {"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"}
  11282. {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native"}
  11283. {"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"}
  11284. {"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"}
  11285. {"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}
  11286. {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough"}
  11287. {"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"}
  11288. {"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"}
  11289. {"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}
  11290. {"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"}
  11291. {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Elapsed":0.24}
  11292. {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit"}
  11293. {"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"}
  11294. {"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"}
  11295. {"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}
  11296. {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss"}
  11297. {"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"}
  11298. {"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"}
  11299. {"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}
  11300. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss"}
  11301. {"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"}
  11302. {"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"}
  11303. {"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}
  11304. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss"}
  11305. {"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"}
  11306. {"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"}
  11307. {"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}
  11308. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded"}
  11309. {"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"}
  11310. {"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"}
  11311. {"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}
  11312. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit"}
  11313. {"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"}
  11314. {"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"}
  11315. {"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}
  11316. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored"}
  11317. {"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"}
  11318. {"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"}
  11319. {"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}
  11320. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky"}
  11321. {"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"}
  11322. {"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"}
  11323. {"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}
  11324. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky"}
  11325. {"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"}
  11326. {"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"}
  11327. {"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}
  11328. {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames"}
  11329. {"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"}
  11330. {"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"}
  11331. {"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"}
  11332. {"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"}
  11333. {"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}
  11334. {"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"}
  11335. {"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"}
  11336. {"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"}
  11337. {"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}
  11338. {"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"}
  11339. {"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"}
  11340. {"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"}
  11341. {"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}
  11342. {"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"}
  11343. {"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}
  11344. {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead"}
  11345. {"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"}
  11346. {"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"}
  11347. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Elapsed":0}
  11348. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse"}
  11349. {"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"}
  11350. {"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"}
  11351. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Elapsed":0}
  11352. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL"}
  11353. {"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"}
  11354. {"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"}
  11355. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Elapsed":0}
  11356. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot"}
  11357. {"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"}
  11358. {"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"}
  11359. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Elapsed":0}
  11360. {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity"}
  11361. {"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"}
  11362. {"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"}
  11363. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Elapsed":0}
  11364. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL"}
  11365. {"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"}
  11366. {"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"}
  11367. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Elapsed":0}
  11368. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout"}
  11369. {"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"}
  11370. {"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"}
  11371. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Elapsed":0}
  11372. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader"}
  11373. {"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"}
  11374. {"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"}
  11375. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Elapsed":0}
  11376. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError"}
  11377. {"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"}
  11378. {"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"}
  11379. {"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"}
  11380. {"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"}
  11381. {"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}
  11382. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full"}
  11383. {"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"}
  11384. {"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"}
  11385. {"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}
  11386. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable"}
  11387. {"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"}
  11388. {"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"}
  11389. {"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}
  11390. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout"}
  11391. {"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"}
  11392. {"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"}
  11393. {"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}
  11394. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401"}
  11395. {"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"}
  11396. {"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"}
  11397. {"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}
  11398. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited"}
  11399. {"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"}
  11400. {"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"}
  11401. {"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}
  11402. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx"}
  11403. {"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"}
  11404. {"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"}
  11405. {"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}
  11406. {"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"}
  11407. {"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"}
  11408. {"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"}
  11409. {"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}
  11410. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other"}
  11411. {"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"}
  11412. {"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"}
  11413. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Elapsed":0}
  11414. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil"}
  11415. {"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"}
  11416. {"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"}
  11417. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Elapsed":0}
  11418. {"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"}
  11419. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Elapsed":0}
  11420. {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError"}
  11421. {"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"}
  11422. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished"}
  11423. {"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"}
  11424. {"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"}
  11425. {"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}
  11426. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline"}
  11427. {"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"}
  11428. {"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"}
  11429. {"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}
  11430. {"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"}
  11431. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Elapsed":0}
  11432. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError"}
  11433. {"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"}
  11434. {"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"}
  11435. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Elapsed":0}
  11436. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent"}
  11437. {"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"}
  11438. {"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"}
  11439. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Elapsed":0}
  11440. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason"}
  11441. {"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"}
  11442. {"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"}
  11443. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Elapsed":0}
  11444. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus"}
  11445. {"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"}
  11446. {"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"}
  11447. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Elapsed":0}
  11448. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse"}
  11449. {"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"}
  11450. {"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"}
  11451. {"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"}
  11452. {"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"}
  11453. {"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}
  11454. {"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"}
  11455. {"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"}
  11456. {"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"}
  11457. {"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}
  11458. {"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"}
  11459. {"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"}
  11460. {"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"}
  11461. {"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}
  11462. {"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"}
  11463. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Elapsed":0}
  11464. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown"}
  11465. {"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"}
  11466. {"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"}
  11467. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Elapsed":0}
  11468. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy"}
  11469. {"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"}
  11470. {"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"}
  11471. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Elapsed":0}
  11472. {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling"}
  11473. {"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"}
  11474. {"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"}
  11475. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Elapsed":1.2}
  11476. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff"}
  11477. {"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"}
  11478. {"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"}
  11479. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Elapsed":0}
  11480. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget"}
  11481. {"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"}
  11482. {"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"}
  11483. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Elapsed":0}
  11484. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason"}
  11485. {"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"}
  11486. {"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"}
  11487. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Elapsed":0}
  11488. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode"}
  11489. {"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"}
  11490. {"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"}
  11491. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Elapsed":0}
  11492. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot"}
  11493. {"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"}
  11494. {"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"}
  11495. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Elapsed":0}
  11496. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema"}
  11497. {"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"}
  11498. {"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"}
  11499. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Elapsed":0}
  11500. {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure"}
  11501. {"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"}
  11502. {"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"}
  11503. {"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"}
  11504. {"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"}
  11505. {"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"}
  11506. {"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"}
  11507. {"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"}
  11508. {"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"}
  11509. {"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"}
  11510. {"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"}
  11511. {"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"}
  11512. {"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"}
  11513. {"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"}
  11514. {"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"}
  11515. {"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"}
  11516. {"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"}
  11517. {"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"}
  11518. {"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"}
  11519. {"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"}
  11520. {"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}
  11521. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope"}
  11522. {"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"}
  11523. {"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"}
  11524. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Elapsed":0}
  11525. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent"}
  11526. {"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"}
  11527. {"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"}
  11528. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Elapsed":0}
  11529. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"}
  11530. {"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"}
  11531. {"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"}
  11532. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"}
  11533. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper"}
  11534. {"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"}
  11535. {"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"}
  11536. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Elapsed":0}
  11537. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls"}
  11538. {"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"}
  11539. {"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"}
  11540. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Elapsed":0}
  11541. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect"}
  11542. {"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"}
  11543. {"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"}
  11544. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Elapsed":0}
  11545. {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership"}
  11546. {"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"}
  11547. {"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"}
  11548. {"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"}
  11549. {"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"}
  11550. {"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}
  11551. {"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"}
  11552. {"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"}
  11553. {"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"}
  11554. {"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}
  11555. {"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"}
  11556. {"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"}
  11557. {"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"}
  11558. {"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}
  11559. {"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"}
  11560. {"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}
  11561. {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns"}
  11562. {"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"}
  11563. {"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"}
  11564. {"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"}
  11565. {"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"}
  11566. {"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"}
  11567. {"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"}
  11568. {"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"}
  11569. {"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"}
  11570. {"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"}
  11571. {"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"}
  11572. {"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"}
  11573. {"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"}
  11574. {"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"}
  11575. {"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"}
  11576. {"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}
  11577. {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose"}
  11578. {"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"}
  11579. {"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"}
  11580. {"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"}
  11581. {"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"}
  11582. {"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"}
  11583. {"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"}
  11584. {"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"}
  11585. {"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"}
  11586. {"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"}
  11587. {"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}
  11588. {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession"}
  11589. {"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"}
  11590. {"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"}
  11591. {"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"}
  11592. {"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"}
  11593. {"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"}
  11594. {"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"}
  11595. {"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"}
  11596. {"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"}
  11597. {"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"}
  11598. {"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"}
  11599. {"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}
  11600. {"Time":"2026-09-12T11:38:53.5254045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel"}
  11601. {"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"}
  11602. {"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"}
  11603. {"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"}
  11604. {"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"}
  11605. {"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"}
  11606. {"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"}
  11607. {"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"}
  11608. {"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"}
  11609. {"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"}
  11610. {"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"}
  11611. {"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"}
  11612. {"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"}
  11613. {"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"}
  11614. {"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"}
  11615. {"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}
  11616. {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite"}
  11617. {"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"}
  11618. {"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"}
  11619. {"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"}
  11620. {"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"}
  11621. {"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"}
  11622. {"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"}
  11623. {"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"}
  11624. {"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"}
  11625. {"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"}
  11626. {"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"}
  11627. {"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"}
  11628. {"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"}
  11629. {"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"}
  11630. {"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"}
  11631. {"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"}
  11632. {"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"}
  11633. {"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"}
  11634. {"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"}
  11635. {"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"}
  11636. {"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"}
  11637. {"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}
  11638. {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions"}
  11639. {"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"}
  11640. {"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"}
  11641. {"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"}
  11642. {"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"}
  11643. {"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"}
  11644. {"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"}
  11645. {"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"}
  11646. {"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"}
  11647. {"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"}
  11648. {"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"}
  11649. {"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"}
  11650. {"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"}
  11651. {"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"}
  11652. {"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"}
  11653. {"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"}
  11654. {"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"}
  11655. {"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"}
  11656. {"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"}
  11657. {"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}
  11658. {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter"}
  11659. {"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"}
  11660. {"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"}
  11661. {"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"}
  11662. {"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"}
  11663. {"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"}
  11664. {"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"}
  11665. {"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"}
  11666. {"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"}
  11667. {"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"}
  11668. {"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"}
  11669. {"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"}
  11670. {"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"}
  11671. {"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"}
  11672. {"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"}
  11673. {"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"}
  11674. {"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}
  11675. {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries"}
  11676. {"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"}
  11677. {"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"}
  11678. {"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"}
  11679. {"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"}
  11680. {"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"}
  11681. {"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"}
  11682. {"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"}
  11683. {"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"}
  11684. {"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"}
  11685. {"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"}
  11686. {"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"}
  11687. {"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"}
  11688. {"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"}
  11689. {"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"}
  11690. {"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"}
  11691. {"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"}
  11692. {"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"}
  11693. {"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}
  11694. {"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"}
  11695. {"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"}
  11696. {"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"}
  11697. {"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"}
  11698. {"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"}
  11699. {"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"}
  11700. {"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"}
  11701. {"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"}
  11702. {"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"}
  11703. {"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"}
  11704. {"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"}
  11705. {"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"}
  11706. {"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"}
  11707. {"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"}
  11708. {"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"}
  11709. {"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"}
  11710. {"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}
  11711. {"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"}
  11712. {"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"}
  11713. {"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"}
  11714. {"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"}
  11715. {"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"}
  11716. {"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"}
  11717. {"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"}
  11718. {"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"}
  11719. {"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"}
  11720. {"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"}
  11721. {"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"}
  11722. {"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"}
  11723. {"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"}
  11724. {"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"}
  11725. {"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"}
  11726. {"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"}
  11727. {"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}
  11728. {"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"}
  11729. {"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"}
  11730. {"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"}
  11731. {"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"}
  11732. {"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}
  11733. {"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"}
  11734. {"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"}
  11735. {"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"}
  11736. {"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"}
  11737. {"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"}
  11738. {"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"}
  11739. {"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"}
  11740. {"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"}
  11741. {"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"}
  11742. {"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"}
  11743. {"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"}
  11744. {"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"}
  11745. {"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"}
  11746. {"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"}
  11747. {"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"}
  11748. {"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"}
  11749. {"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}
  11750. {"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"}
  11751. {"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"}
  11752. {"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"}
  11753. {"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"}
  11754. {"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"}
  11755. {"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"}
  11756. {"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"}
  11757. {"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"}
  11758. {"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"}
  11759. {"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"}
  11760. {"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"}
  11761. {"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"}
  11762. {"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"}
  11763. {"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"}
  11764. {"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"}
  11765. {"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"}
  11766. {"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}
  11767. {"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"}
  11768. {"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}
  11769. {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState"}
  11770. {"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"}
  11771. {"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"}
  11772. {"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"}
  11773. {"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"}
  11774. {"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"}
  11775. {"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"}
  11776. {"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"}
  11777. {"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"}
  11778. {"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"}
  11779. {"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"}
  11780. {"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"}
  11781. {"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"}
  11782. {"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"}
  11783. {"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"}
  11784. {"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"}
  11785. {"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}
  11786. {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream"}
  11787. {"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"}
  11788. {"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"}
  11789. {"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"}
  11790. {"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"}
  11791. {"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"}
  11792. {"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"}
  11793. {"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}
  11794. {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation"}
  11795. {"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"}
  11796. {"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"}
  11797. {"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}
  11798. {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate"}
  11799. {"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"}
  11800. {"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"}
  11801. {"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"}
  11802. {"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"}
  11803. {"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"}
  11804. {"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"}
  11805. {"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"}
  11806. {"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"}
  11807. {"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"}
  11808. {"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"}
  11809. {"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"}
  11810. {"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"}
  11811. {"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"}
  11812. {"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"}
  11813. {"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}
  11814. {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects"}
  11815. {"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"}
  11816. {"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"}
  11817. {"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"}
  11818. {"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"}
  11819. {"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"}
  11820. {"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"}
  11821. {"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"}
  11822. {"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"}
  11823. {"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"}
  11824. {"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"}
  11825. {"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"}
  11826. {"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"}
  11827. {"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"}
  11828. {"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"}
  11829. {"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"}
  11830. {"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"}
  11831. {"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"}
  11832. {"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}
  11833. {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval"}
  11834. {"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"}
  11835. {"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"}
  11836. {"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"}
  11837. {"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"}
  11838. {"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"}
  11839. {"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"}
  11840. {"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"}
  11841. {"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"}
  11842. {"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"}
  11843. {"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"}
  11844. {"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"}
  11845. {"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"}
  11846. {"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"}
  11847. {"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"}
  11848. {"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}
  11849. {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput"}
  11850. {"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"}
  11851. {"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"}
  11852. {"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"}
  11853. {"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"}
  11854. {"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"}
  11855. {"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"}
  11856. {"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"}
  11857. {"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"}
  11858. {"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"}
  11859. {"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"}
  11860. {"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"}
  11861. {"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"}
  11862. {"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"}
  11863. {"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"}
  11864. {"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}
  11865. {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID"}
  11866. {"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"}
  11867. {"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"}
  11868. {"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"}
  11869. {"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"}
  11870. {"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"}
  11871. {"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"}
  11872. {"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"}
  11873. {"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"}
  11874. {"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"}
  11875. {"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"}
  11876. {"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"}
  11877. {"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"}
  11878. {"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"}
  11879. {"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"}
  11880. {"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}
  11881. {"Time":"2026-09-12T11:38:53.5578771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID"}
  11882. {"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"}
  11883. {"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"}
  11884. {"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"}
  11885. {"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"}
  11886. {"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"}
  11887. {"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"}
  11888. {"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"}
  11889. {"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"}
  11890. {"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"}
  11891. {"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"}
  11892. {"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"}
  11893. {"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"}
  11894. {"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"}
  11895. {"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"}
  11896. {"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}
  11897. {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing"}
  11898. {"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"}
  11899. {"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"}
  11900. {"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"}
  11901. {"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"}
  11902. {"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"}
  11903. {"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"}
  11904. {"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"}
  11905. {"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"}
  11906. {"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"}
  11907. {"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"}
  11908. {"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"}
  11909. {"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"}
  11910. {"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}
  11911. {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent"}
  11912. {"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"}
  11913. {"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"}
  11914. {"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"}
  11915. {"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"}
  11916. {"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"}
  11917. {"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"}
  11918. {"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"}
  11919. {"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"}
  11920. {"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"}
  11921. {"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"}
  11922. {"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"}
  11923. {"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"}
  11924. {"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}
  11925. {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent"}
  11926. {"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"}
  11927. {"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"}
  11928. {"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"}
  11929. {"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"}
  11930. {"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"}
  11931. {"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"}
  11932. {"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"}
  11933. {"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"}
  11934. {"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"}
  11935. {"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"}
  11936. {"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"}
  11937. {"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"}
  11938. {"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"}
  11939. {"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"}
  11940. {"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}
  11941. {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn"}
  11942. {"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"}
  11943. {"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"}
  11944. {"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"}
  11945. {"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"}
  11946. {"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"}
  11947. {"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"}
  11948. {"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"}
  11949. {"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"}
  11950. {"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"}
  11951. {"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"}
  11952. {"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"}
  11953. {"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"}
  11954. {"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"}
  11955. {"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"}
  11956. {"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"}
  11957. {"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"}
  11958. {"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"}
  11959. {"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}
  11960. {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects"}
  11961. {"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"}
  11962. {"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"}
  11963. {"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"}
  11964. {"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"}
  11965. {"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"}
  11966. {"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"}
  11967. {"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"}
  11968. {"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"}
  11969. {"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"}
  11970. {"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"}
  11971. {"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"}
  11972. {"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"}
  11973. {"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"}
  11974. {"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"}
  11975. {"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"}
  11976. {"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"}
  11977. {"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"}
  11978. {"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}
  11979. {"Time":"2026-09-12T11:38:53.568661+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext"}
  11980. {"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"}
  11981. {"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"}
  11982. {"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"}
  11983. {"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"}
  11984. {"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"}
  11985. {"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"}
  11986. {"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"}
  11987. {"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"}
  11988. {"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"}
  11989. {"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"}
  11990. {"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"}
  11991. {"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"}
  11992. {"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"}
  11993. {"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"}
  11994. {"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"}
  11995. {"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"}
  11996. {"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"}
  11997. {"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}
  11998. {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID"}
  11999. {"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"}
  12000. {"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"}
  12001. {"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"}
  12002. {"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"}
  12003. {"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"}
  12004. {"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"}
  12005. {"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"}
  12006. {"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"}
  12007. {"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"}
  12008. {"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"}
  12009. {"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"}
  12010. {"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"}
  12011. {"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}
  12012. {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput"}
  12013. {"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"}
  12014. {"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"}
  12015. {"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"}
  12016. {"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"}
  12017. {"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"}
  12018. {"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"}
  12019. {"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"}
  12020. {"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"}
  12021. {"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"}
  12022. {"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"}
  12023. {"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"}
  12024. {"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"}
  12025. {"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}
  12026. {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce"}
  12027. {"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"}
  12028. {"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"}
  12029. {"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"}
  12030. {"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"}
  12031. {"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"}
  12032. {"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"}
  12033. {"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"}
  12034. {"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"}
  12035. {"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"}
  12036. {"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"}
  12037. {"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"}
  12038. {"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"}
  12039. {"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"}
  12040. {"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"}
  12041. {"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"}
  12042. {"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"}
  12043. {"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"}
  12044. {"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"}
  12045. {"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}
  12046. {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID"}
  12047. {"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"}
  12048. {"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"}
  12049. {"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"}
  12050. {"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"}
  12051. {"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"}
  12052. {"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"}
  12053. {"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"}
  12054. {"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"}
  12055. {"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"}
  12056. {"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"}
  12057. {"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"}
  12058. {"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"}
  12059. {"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"}
  12060. {"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"}
  12061. {"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"}
  12062. {"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"}
  12063. {"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"}
  12064. {"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"}
  12065. {"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"}
  12066. {"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"}
  12067. {"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"}
  12068. {"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}
  12069. {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery"}
  12070. {"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"}
  12071. {"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"}
  12072. {"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"}
  12073. {"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"}
  12074. {"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"}
  12075. {"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"}
  12076. {"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"}
  12077. {"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"}
  12078. {"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"}
  12079. {"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"}
  12080. {"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"}
  12081. {"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"}
  12082. {"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"}
  12083. {"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"}
  12084. {"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"}
  12085. {"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"}
  12086. {"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"}
  12087. {"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"}
  12088. {"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"}
  12089. {"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"}
  12090. {"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"}
  12091. {"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}
  12092. {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID"}
  12093. {"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"}
  12094. {"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"}
  12095. {"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"}
  12096. {"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"}
  12097. {"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"}
  12098. {"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"}
  12099. {"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"}
  12100. {"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"}
  12101. {"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"}
  12102. {"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"}
  12103. {"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"}
  12104. {"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"}
  12105. {"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"}
  12106. {"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"}
  12107. {"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"}
  12108. {"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"}
  12109. {"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"}
  12110. {"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"}
  12111. {"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"}
  12112. {"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}
  12113. {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID"}
  12114. {"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"}
  12115. {"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"}
  12116. {"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}
  12117. {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream"}
  12118. {"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"}
  12119. {"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"}
  12120. {"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"}
  12121. {"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"}
  12122. {"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"}
  12123. {"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"}
  12124. {"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"}
  12125. {"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"}
  12126. {"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"}
  12127. {"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"}
  12128. {"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"}
  12129. {"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}
  12130. {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn"}
  12131. {"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"}
  12132. {"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"}
  12133. {"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"}
  12134. {"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"}
  12135. {"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"}
  12136. {"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"}
  12137. {"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"}
  12138. {"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"}
  12139. {"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"}
  12140. {"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"}
  12141. {"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"}
  12142. {"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"}
  12143. {"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"}
  12144. {"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"}
  12145. {"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"}
  12146. {"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"}
  12147. {"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}
  12148. {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"}
  12149. {"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"}
  12150. {"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"}
  12151. {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"}
  12152. {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"}
  12153. {"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"}
  12154. {"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"}
  12155. {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"}
  12156. {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"}
  12157. {"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"}
  12158. {"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"}
  12159. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"}
  12160. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload"}
  12161. {"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"}
  12162. {"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"}
  12163. {"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"}
  12164. {"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"}
  12165. {"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}
  12166. {"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"}
  12167. {"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"}
  12168. {"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"}
  12169. {"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}
  12170. {"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"}
  12171. {"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"}
  12172. {"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"}
  12173. {"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}
  12174. {"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"}
  12175. {"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"}
  12176. {"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"}
  12177. {"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}
  12178. {"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"}
  12179. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Elapsed":0}
  12180. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload"}
  12181. {"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"}
  12182. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool"}
  12183. {"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"}
  12184. {"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"}
  12185. {"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}
  12186. {"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"}
  12187. {"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"}
  12188. {"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"}
  12189. {"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}
  12190. {"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"}
  12191. {"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"}
  12192. {"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"}
  12193. {"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}
  12194. {"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"}
  12195. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Elapsed":0}
  12196. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"}
  12197. {"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"}
  12198. {"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"}
  12199. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"}
  12200. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"}
  12201. {"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"}
  12202. {"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"}
  12203. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"}
  12204. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"}
  12205. {"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"}
  12206. {"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"}
  12207. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"}
  12208. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"}
  12209. {"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"}
  12210. {"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"}
  12211. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"}
  12212. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"}
  12213. {"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"}
  12214. {"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"}
  12215. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"}
  12216. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"}
  12217. {"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"}
  12218. {"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"}
  12219. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"}
  12220. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"}
  12221. {"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"}
  12222. {"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"}
  12223. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"}
  12224. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"}
  12225. {"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"}
  12226. {"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"}
  12227. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"}
  12228. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"}
  12229. {"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"}
  12230. {"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"}
  12231. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"}
  12232. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"}
  12233. {"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"}
  12234. {"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"}
  12235. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"}
  12236. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader"}
  12237. {"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"}
  12238. {"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"}
  12239. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Elapsed":0}
  12240. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader"}
  12241. {"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"}
  12242. {"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"}
  12243. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Elapsed":0}
  12244. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey"}
  12245. {"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"}
  12246. {"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"}
  12247. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Elapsed":0}
  12248. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields"}
  12249. {"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"}
  12250. {"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"}
  12251. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Elapsed":0}
  12252. {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky"}
  12253. {"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"}
  12254. {"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"}
  12255. {"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"}
  12256. {"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"}
  12257. {"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"}
  12258. {"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"}
  12259. {"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"}
  12260. {"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"}
  12261. {"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"}
  12262. {"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"}
  12263. {"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"}
  12264. {"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"}
  12265. {"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"}
  12266. {"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"}
  12267. {"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"}
  12268. {"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"}
  12269. {"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}
  12270. {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode"}
  12271. {"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"}
  12272. {"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"}
  12273. {"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"}
  12274. {"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"}
  12275. {"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"}
  12276. {"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"}
  12277. {"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"}
  12278. {"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"}
  12279. {"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"}
  12280. {"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"}
  12281. {"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"}
  12282. {"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"}
  12283. {"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"}
  12284. {"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"}
  12285. {"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"}
  12286. {"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}
  12287. {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs"}
  12288. {"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"}
  12289. {"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"}
  12290. {"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"}
  12291. {"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"}
  12292. {"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"}
  12293. {"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"}
  12294. {"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"}
  12295. {"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"}
  12296. {"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"}
  12297. {"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"}
  12298. {"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"}
  12299. {"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"}
  12300. {"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"}
  12301. {"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"}
  12302. {"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"}
  12303. {"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"}
  12304. {"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}
  12305. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity"}
  12306. {"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"}
  12307. {"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"}
  12308. {"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"}
  12309. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Elapsed":0}
  12310. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity"}
  12311. {"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"}
  12312. {"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"}
  12313. {"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"}
  12314. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Elapsed":0}
  12315. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn"}
  12316. {"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"}
  12317. {"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"}
  12318. {"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"}
  12319. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Elapsed":0}
  12320. {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent"}
  12321. {"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"}
  12322. {"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"}
  12323. {"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"}
  12324. {"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"}
  12325. {"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"}
  12326. {"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"}
  12327. {"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"}
  12328. {"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"}
  12329. {"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"}
  12330. {"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"}
  12331. {"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"}
  12332. {"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"}
  12333. {"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"}
  12334. {"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"}
  12335. {"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"}
  12336. {"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"}
  12337. {"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"}
  12338. {"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"}
  12339. {"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"}
  12340. {"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"}
  12341. {"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"}
  12342. {"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"}
  12343. {"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"}
  12344. {"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}
  12345. {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess"}
  12346. {"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"}
  12347. {"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"}
  12348. {"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"}
  12349. {"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"}
  12350. {"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"}
  12351. {"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"}
  12352. {"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"}
  12353. {"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"}
  12354. {"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"}
  12355. {"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"}
  12356. {"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"}
  12357. {"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"}
  12358. {"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"}
  12359. {"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"}
  12360. {"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"}
  12361. {"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"}
  12362. {"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}
  12363. {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues"}
  12364. {"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"}
  12365. {"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"}
  12366. {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Elapsed":0}
  12367. {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne"}
  12368. {"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"}
  12369. {"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"}
  12370. {"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"}
  12371. {"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"}
  12372. {"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"}
  12373. {"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"}
  12374. {"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"}
  12375. {"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"}
  12376. {"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"}
  12377. {"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"}
  12378. {"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"}
  12379. {"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"}
  12380. {"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"}
  12381. {"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"}
  12382. {"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"}
  12383. {"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"}
  12384. {"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"}
  12385. {"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"}
  12386. {"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"}
  12387. {"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"}
  12388. {"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"}
  12389. {"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"}
  12390. {"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"}
  12391. {"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"}
  12392. {"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"}
  12393. {"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"}
  12394. {"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"}
  12395. {"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"}
  12396. {"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"}
  12397. {"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"}
  12398. {"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}
  12399. {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault"}
  12400. {"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"}
  12401. {"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"}
  12402. {"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"}
  12403. {"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"}
  12404. {"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"}
  12405. {"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"}
  12406. {"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"}
  12407. {"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"}
  12408. {"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"}
  12409. {"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"}
  12410. {"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"}
  12411. {"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"}
  12412. {"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"}
  12413. {"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"}
  12414. {"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"}
  12415. {"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}
  12416. {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID"}
  12417. {"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"}
  12418. {"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"}
  12419. {"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"}
  12420. {"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"}
  12421. {"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"}
  12422. {"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"}
  12423. {"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"}
  12424. {"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"}
  12425. {"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"}
  12426. {"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"}
  12427. {"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"}
  12428. {"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"}
  12429. {"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"}
  12430. {"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"}
  12431. {"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}
  12432. {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility"}
  12433. {"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"}
  12434. {"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"}
  12435. {"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"}
  12436. {"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"}
  12437. {"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"}
  12438. {"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"}
  12439. {"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"}
  12440. {"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"}
  12441. {"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"}
  12442. {"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"}
  12443. {"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"}
  12444. {"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"}
  12445. {"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"}
  12446. {"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"}
  12447. {"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"}
  12448. {"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"}
  12449. {"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"}
  12450. {"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}
  12451. {"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"}
  12452. {"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"}
  12453. {"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"}
  12454. {"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"}
  12455. {"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"}
  12456. {"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"}
  12457. {"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"}
  12458. {"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"}
  12459. {"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"}
  12460. {"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"}
  12461. {"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"}
  12462. {"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"}
  12463. {"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"}
  12464. {"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"}
  12465. {"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"}
  12466. {"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"}
  12467. {"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}
  12468. {"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"}
  12469. {"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"}
  12470. {"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"}
  12471. {"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"}
  12472. {"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"}
  12473. {"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"}
  12474. {"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"}
  12475. {"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"}
  12476. {"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"}
  12477. {"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"}
  12478. {"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"}
  12479. {"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"}
  12480. {"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"}
  12481. {"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"}
  12482. {"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"}
  12483. {"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"}
  12484. {"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}
  12485. {"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"}
  12486. {"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"}
  12487. {"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"}
  12488. {"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"}
  12489. {"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"}
  12490. {"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"}
  12491. {"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"}
  12492. {"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"}
  12493. {"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"}
  12494. {"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"}
  12495. {"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"}
  12496. {"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"}
  12497. {"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"}
  12498. {"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"}
  12499. {"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"}
  12500. {"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"}
  12501. {"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}
  12502. {"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"}
  12503. {"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}
  12504. {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent"}
  12505. {"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"}
  12506. {"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"}
  12507. {"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"}
  12508. {"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"}
  12509. {"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"}
  12510. {"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"}
  12511. {"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"}
  12512. {"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"}
  12513. {"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"}
  12514. {"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"}
  12515. {"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"}
  12516. {"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"}
  12517. {"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"}
  12518. {"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"}
  12519. {"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"}
  12520. {"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}
  12521. {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey"}
  12522. {"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"}
  12523. {"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"}
  12524. {"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"}
  12525. {"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"}
  12526. {"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"}
  12527. {"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"}
  12528. {"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"}
  12529. {"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"}
  12530. {"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"}
  12531. {"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"}
  12532. {"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"}
  12533. {"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"}
  12534. {"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"}
  12535. {"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"}
  12536. {"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"}
  12537. {"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}
  12538. {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey"}
  12539. {"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"}
  12540. {"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"}
  12541. {"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"}
  12542. {"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"}
  12543. {"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"}
  12544. {"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"}
  12545. {"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"}
  12546. {"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"}
  12547. {"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"}
  12548. {"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"}
  12549. {"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"}
  12550. {"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"}
  12551. {"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"}
  12552. {"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"}
  12553. {"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}
  12554. {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed"}
  12555. {"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"}
  12556. {"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"}
  12557. {"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"}
  12558. {"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"}
  12559. {"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"}
  12560. {"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"}
  12561. {"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"}
  12562. {"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"}
  12563. {"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"}
  12564. {"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"}
  12565. {"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"}
  12566. {"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"}
  12567. {"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"}
  12568. {"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"}
  12569. {"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}
  12570. {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported"}
  12571. {"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"}
  12572. {"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"}
  12573. {"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}
  12574. {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect"}
  12575. {"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"}
  12576. {"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"}
  12577. {"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"}
  12578. {"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"}
  12579. {"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"}
  12580. {"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"}
  12581. {"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"}
  12582. {"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"}
  12583. {"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"}
  12584. {"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"}
  12585. {"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"}
  12586. {"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"}
  12587. {"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"}
  12588. {"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"}
  12589. {"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"}
  12590. {"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"}
  12591. {"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"}
  12592. {"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"}
  12593. {"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"}
  12594. {"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"}
  12595. {"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"}
  12596. {"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"}
  12597. {"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"}
  12598. {"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"}
  12599. {"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"}
  12600. {"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"}
  12601. {"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}
  12602. {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm"}
  12603. {"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"}
  12604. {"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"}
  12605. {"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"}
  12606. {"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"}
  12607. {"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"}
  12608. {"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"}
  12609. {"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"}
  12610. {"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"}
  12611. {"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"}
  12612. {"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"}
  12613. {"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"}
  12614. {"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"}
  12615. {"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"}
  12616. {"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"}
  12617. {"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"}
  12618. {"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"}
  12619. {"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"}
  12620. {"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"}
  12621. {"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}
  12622. {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext"}
  12623. {"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"}
  12624. {"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"}
  12625. {"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"}
  12626. {"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"}
  12627. {"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"}
  12628. {"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}
  12629. {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse"}
  12630. {"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"}
  12631. {"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"}
  12632. {"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"}
  12633. {"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"}
  12634. {"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"}
  12635. {"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"}
  12636. {"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"}
  12637. {"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"}
  12638. {"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"}
  12639. {"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"}
  12640. {"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"}
  12641. {"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"}
  12642. {"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"}
  12643. {"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"}
  12644. {"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"}
  12645. {"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"}
  12646. {"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"}
  12647. {"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"}
  12648. {"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"}
  12649. {"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"}
  12650. {"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"}
  12651. {"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"}
  12652. {"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"}
  12653. {"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"}
  12654. {"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"}
  12655. {"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"}
  12656. {"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}
  12657. {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation"}
  12658. {"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"}
  12659. {"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"}
  12660. {"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"}
  12661. {"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"}
  12662. {"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"}
  12663. {"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"}
  12664. {"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"}
  12665. {"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"}
  12666. {"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"}
  12667. {"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"}
  12668. {"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"}
  12669. {"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"}
  12670. {"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"}
  12671. {"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"}
  12672. {"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"}
  12673. {"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"}
  12674. {"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"}
  12675. {"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"}
  12676. {"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"}
  12677. {"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"}
  12678. {"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"}
  12679. {"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"}
  12680. {"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"}
  12681. {"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"}
  12682. {"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"}
  12683. {"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"}
  12684. {"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"}
  12685. {"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"}
  12686. {"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"}
  12687. {"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"}
  12688. {"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"}
  12689. {"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"}
  12690. {"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"}
  12691. {"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"}
  12692. {"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"}
  12693. {"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"}
  12694. {"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"}
  12695. {"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"}
  12696. {"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}
  12697. {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse"}
  12698. {"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"}
  12699. {"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"}
  12700. {"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"}
  12701. {"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"}
  12702. {"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"}
  12703. {"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"}
  12704. {"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"}
  12705. {"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"}
  12706. {"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"}
  12707. {"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"}
  12708. {"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"}
  12709. {"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"}
  12710. {"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"}
  12711. {"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"}
  12712. {"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"}
  12713. {"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"}
  12714. {"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"}
  12715. {"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"}
  12716. {"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"}
  12717. {"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"}
  12718. {"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"}
  12719. {"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"}
  12720. {"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"}
  12721. {"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"}
  12722. {"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"}
  12723. {"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"}
  12724. {"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}
  12725. {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead"}
  12726. {"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"}
  12727. {"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"}
  12728. {"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"}
  12729. {"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"}
  12730. {"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"}
  12731. {"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"}
  12732. {"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"}
  12733. {"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"}
  12734. {"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"}
  12735. {"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"}
  12736. {"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"}
  12737. {"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"}
  12738. {"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"}
  12739. {"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"}
  12740. {"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"}
  12741. {"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}
  12742. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded"}
  12743. {"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"}
  12744. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty"}
  12745. {"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"}
  12746. {"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"}
  12747. {"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}
  12748. {"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"}
  12749. {"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"}
  12750. {"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"}
  12751. {"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}
  12752. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created"}
  12753. {"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"}
  12754. {"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"}
  12755. {"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}
  12756. {"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"}
  12757. {"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"}
  12758. {"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"}
  12759. {"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}
  12760. {"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"}
  12761. {"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"}
  12762. {"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"}
  12763. {"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}
  12764. {"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"}
  12765. {"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"}
  12766. {"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"}
  12767. {"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}
  12768. {"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"}
  12769. {"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"}
  12770. {"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"}
  12771. {"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}
  12772. {"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"}
  12773. {"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"}
  12774. {"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"}
  12775. {"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}
  12776. {"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"}
  12777. {"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"}
  12778. {"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"}
  12779. {"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}
  12780. {"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"}
  12781. {"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"}
  12782. {"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"}
  12783. {"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}
  12784. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text"}
  12785. {"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"}
  12786. {"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"}
  12787. {"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}
  12788. {"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"}
  12789. {"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"}
  12790. {"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"}
  12791. {"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}
  12792. {"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"}
  12793. {"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"}
  12794. {"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"}
  12795. {"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}
  12796. {"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"}
  12797. {"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"}
  12798. {"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"}
  12799. {"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}
  12800. {"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"}
  12801. {"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"}
  12802. {"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"}
  12803. {"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}
  12804. {"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"}
  12805. {"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"}
  12806. {"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"}
  12807. {"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}
  12808. {"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"}
  12809. {"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"}
  12810. {"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"}
  12811. {"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}
  12812. {"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"}
  12813. {"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"}
  12814. {"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"}
  12815. {"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}
  12816. {"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"}
  12817. {"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"}
  12818. {"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"}
  12819. {"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}
  12820. {"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"}
  12821. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Elapsed":0}
  12822. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed"}
  12823. {"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"}
  12824. {"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"}
  12825. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Elapsed":0}
  12826. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload"}
  12827. {"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"}
  12828. {"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"}
  12829. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Elapsed":0}
  12830. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents"}
  12831. {"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"}
  12832. {"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"}
  12833. {"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"}
  12834. {"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"}
  12835. {"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}
  12836. {"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"}
  12837. {"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"}
  12838. {"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"}
  12839. {"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}
  12840. {"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"}
  12841. {"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"}
  12842. {"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"}
  12843. {"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}
  12844. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed"}
  12845. {"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"}
  12846. {"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"}
  12847. {"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}
  12848. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done"}
  12849. {"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"}
  12850. {"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"}
  12851. {"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}
  12852. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed"}
  12853. {"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"}
  12854. {"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"}
  12855. {"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}
  12856. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete"}
  12857. {"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"}
  12858. {"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"}
  12859. {"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}
  12860. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled"}
  12861. {"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"}
  12862. {"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"}
  12863. {"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}
  12864. {"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"}
  12865. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Elapsed":0}
  12866. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient"}
  12867. {"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"}
  12868. {"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"}
  12869. {"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"}
  12870. {"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"}
  12871. {"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"}
  12872. {"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"}
  12873. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Elapsed":0}
  12874. {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient"}
  12875. {"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"}
  12876. {"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"}
  12877. {"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"}
  12878. {"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"}
  12879. {"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"}
  12880. {"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"}
  12881. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Elapsed":0}
  12882. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient"}
  12883. {"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"}
  12884. {"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"}
  12885. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Elapsed":0}
  12886. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient"}
  12887. {"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"}
  12888. {"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"}
  12889. {"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"}
  12890. {"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"}
  12891. {"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"}
  12892. {"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"}
  12893. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Elapsed":0}
  12894. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal"}
  12895. {"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"}
  12896. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed"}
  12897. {"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"}
  12898. {"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"}
  12899. {"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}
  12900. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done"}
  12901. {"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"}
  12902. {"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"}
  12903. {"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}
  12904. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed"}
  12905. {"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"}
  12906. {"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"}
  12907. {"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}
  12908. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete"}
  12909. {"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"}
  12910. {"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"}
  12911. {"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}
  12912. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled"}
  12913. {"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"}
  12914. {"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"}
  12915. {"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}
  12916. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled"}
  12917. {"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"}
  12918. {"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"}
  12919. {"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}
  12920. {"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"}
  12921. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Elapsed":0}
  12922. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate"}
  12923. {"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"}
  12924. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream"}
  12925. {"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"}
  12926. {"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"}
  12927. {"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"}
  12928. {"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"}
  12929. {"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"}
  12930. {"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"}
  12931. {"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"}
  12932. {"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"}
  12933. {"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"}
  12934. {"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"}
  12935. {"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"}
  12936. {"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"}
  12937. {"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"}
  12938. {"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"}
  12939. {"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}
  12940. {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream"}
  12941. {"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"}
  12942. {"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"}
  12943. {"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"}
  12944. {"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"}
  12945. {"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"}
  12946. {"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"}
  12947. {"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"}
  12948. {"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"}
  12949. {"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"}
  12950. {"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"}
  12951. {"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"}
  12952. {"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"}
  12953. {"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"}
  12954. {"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"}
  12955. {"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}
  12956. {"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"}
  12957. {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Elapsed":0}
  12958. {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes"}
  12959. {"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"}
  12960. {"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"}
  12961. {"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"}
  12962. {"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"}
  12963. {"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"}
  12964. {"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"}
  12965. {"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"}
  12966. {"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"}
  12967. {"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"}
  12968. {"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"}
  12969. {"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"}
  12970. {"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"}
  12971. {"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"}
  12972. {"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"}
  12973. {"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"}
  12974. {"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"}
  12975. {"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}
  12976. {"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"}
  12977. {"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"}
  12978. {"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"}
  12979. {"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"}
  12980. {"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"}
  12981. {"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"}
  12982. {"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"}
  12983. {"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"}
  12984. {"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"}
  12985. {"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"}
  12986. {"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"}
  12987. {"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"}
  12988. {"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"}
  12989. {"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"}
  12990. {"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"}
  12991. {"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}
  12992. {"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"}
  12993. {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Elapsed":0}
  12994. {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash"}
  12995. {"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"}
  12996. {"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"}
  12997. {"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"}
  12998. {"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"}
  12999. {"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"}
  13000. {"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"}
  13001. {"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"}
  13002. {"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"}
  13003. {"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"}
  13004. {"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"}
  13005. {"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"}
  13006. {"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"}
  13007. {"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"}
  13008. {"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"}
  13009. {"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"}
  13010. {"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"}
  13011. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Elapsed":0}
  13012. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput"}
  13013. {"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"}
  13014. {"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"}
  13015. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Elapsed":0}
  13016. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite"}
  13017. {"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"}
  13018. {"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"}
  13019. {"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"}
  13020. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Elapsed":0}
  13021. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput"}
  13022. {"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"}
  13023. {"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"}
  13024. {"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"}
  13025. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Elapsed":0}
  13026. {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount"}
  13027. {"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"}
  13028. {"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"}
  13029. {"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"}
  13030. {"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"}
  13031. {"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"}
  13032. {"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"}
  13033. {"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"}
  13034. {"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"}
  13035. {"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"}
  13036. {"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"}
  13037. {"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"}
  13038. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Elapsed":0}
  13039. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout"}
  13040. {"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"}
  13041. {"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"}
  13042. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Elapsed":0}
  13043. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields"}
  13044. {"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"}
  13045. {"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"}
  13046. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Elapsed":0}
  13047. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint"}
  13048. {"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"}
  13049. {"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"}
  13050. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Elapsed":0}
  13051. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate"}
  13052. {"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"}
  13053. {"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"}
  13054. {"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"}
  13055. {"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"}
  13056. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Elapsed":0}
  13057. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault"}
  13058. {"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"}
  13059. {"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"}
  13060. {"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"}
  13061. {"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"}
  13062. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Elapsed":0}
  13063. {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools"}
  13064. {"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"}
  13065. {"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"}
  13066. {"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"}
  13067. {"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"}
  13068. {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Elapsed":0}
  13069. {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone"}
  13070. {"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"}
  13071. {"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"}
  13072. {"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"}
  13073. {"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"}
  13074. {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Elapsed":0}
  13075. {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE"}
  13076. {"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"}
  13077. {"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"}
  13078. {"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"}
  13079. {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Elapsed":0}
  13080. {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery"}
  13081. {"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"}
  13082. {"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"}
  13083. {"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"}
  13084. {"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"}
  13085. {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Elapsed":0}
  13086. {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools"}
  13087. {"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"}
  13088. {"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"}
  13089. {"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"}
  13090. {"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"}
  13091. {"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"}
  13092. {"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"}
  13093. {"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"}
  13094. {"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"}
  13095. {"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"}
  13096. {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Elapsed":0}
  13097. {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay"}
  13098. {"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"}
  13099. {"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"}
  13100. {"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"}
  13101. {"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"}
  13102. {"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"}
  13103. {"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"}
  13104. {"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"}
  13105. {"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"}
  13106. {"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"}
  13107. {"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"}
  13108. {"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"}
  13109. {"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"}
  13110. {"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"}
  13111. {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Elapsed":0}
  13112. {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall"}
  13113. {"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"}
  13114. {"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"}
  13115. {"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"}
  13116. {"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"}
  13117. {"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"}
  13118. {"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"}
  13119. {"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"}
  13120. {"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"}
  13121. {"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"}
  13122. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Elapsed":0}
  13123. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS"}
  13124. {"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"}
  13125. {"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"}
  13126. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Elapsed":0}
  13127. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision"}
  13128. {"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"}
  13129. {"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"}
  13130. {"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"}
  13131. {"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"}
  13132. {"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}
  13133. {"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"}
  13134. {"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"}
  13135. {"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"}
  13136. {"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}
  13137. {"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"}
  13138. {"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"}
  13139. {"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"}
  13140. {"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}
  13141. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges"}
  13142. {"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"}
  13143. {"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"}
  13144. {"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}
  13145. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough"}
  13146. {"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"}
  13147. {"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"}
  13148. {"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}
  13149. {"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"}
  13150. {"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"}
  13151. {"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"}
  13152. {"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}
  13153. {"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"}
  13154. {"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"}
  13155. {"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"}
  13156. {"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}
  13157. {"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"}
  13158. {"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"}
  13159. {"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"}
  13160. {"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}
  13161. {"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"}
  13162. {"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"}
  13163. {"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"}
  13164. {"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}
  13165. {"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"}
  13166. {"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"}
  13167. {"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"}
  13168. {"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}
  13169. {"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"}
  13170. {"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"}
  13171. {"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"}
  13172. {"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}
  13173. {"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"}
  13174. {"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"}
  13175. {"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"}
  13176. {"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}
  13177. {"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"}
  13178. {"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"}
  13179. {"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"}
  13180. {"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}
  13181. {"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"}
  13182. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Elapsed":0}
  13183. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety"}
  13184. {"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"}
  13185. {"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"}
  13186. {"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"}
  13187. {"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"}
  13188. {"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"}
  13189. {"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}
  13190. {"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"}
  13191. {"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"}
  13192. {"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"}
  13193. {"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"}
  13194. {"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}
  13195. {"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"}
  13196. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Elapsed":0}
  13197. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety"}
  13198. {"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"}
  13199. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401"}
  13200. {"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"}
  13201. {"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"}
  13202. {"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"}
  13203. {"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}
  13204. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429"}
  13205. {"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"}
  13206. {"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"}
  13207. {"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"}
  13208. {"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}
  13209. {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500"}
  13210. {"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"}
  13211. {"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"}
  13212. {"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"}
  13213. {"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}
  13214. {"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"}
  13215. {"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"}
  13216. {"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"}
  13217. {"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"}
  13218. {"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}
  13219. {"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"}
  13220. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Elapsed":0}
  13221. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput"}
  13222. {"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"}
  13223. {"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"}
  13224. {"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"}
  13225. {"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"}
  13226. {"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"}
  13227. {"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"}
  13228. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Elapsed":0}
  13229. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety"}
  13230. {"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"}
  13231. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1"}
  13232. {"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"}
  13233. {"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"}
  13234. {"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"}
  13235. {"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}
  13236. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2"}
  13237. {"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"}
  13238. {"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"}
  13239. {"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"}
  13240. {"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}
  13241. {"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"}
  13242. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Elapsed":0}
  13243. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient"}
  13244. {"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"}
  13245. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame"}
  13246. {"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"}
  13247. {"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"}
  13248. {"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"}
  13249. {"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}
  13250. {"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"}
  13251. {"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"}
  13252. {"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"}
  13253. {"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"}
  13254. {"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"}
  13255. {"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}
  13256. {"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"}
  13257. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Elapsed":0}
  13258. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed"}
  13259. {"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"}
  13260. {"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"}
  13261. {"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"}
  13262. {"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"}
  13263. {"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"}
  13264. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Elapsed":0}
  13265. {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes"}
  13266. {"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"}
  13267. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body"}
  13268. {"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"}
  13269. {"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"}
  13270. {"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"}
  13271. {"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}
  13272. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event"}
  13273. {"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"}
  13274. {"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"}
  13275. {"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"}
  13276. {"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}
  13277. {"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"}
  13278. {"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"}
  13279. {"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"}
  13280. {"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"}
  13281. {"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"}
  13282. {"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}
  13283. {"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"}
  13284. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Elapsed":0}
  13285. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed"}
  13286. {"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"}
  13287. {"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"}
  13288. {"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"}
  13289. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Elapsed":0}
  13290. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted"}
  13291. {"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"}
  13292. {"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"}
  13293. {"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"}
  13294. {"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"}
  13295. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Elapsed":0}
  13296. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover"}
  13297. {"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"}
  13298. {"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"}
  13299. {"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"}
  13300. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Elapsed":0}
  13301. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput"}
  13302. {"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"}
  13303. {"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"}
  13304. {"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"}
  13305. {"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"}
  13306. {"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"}
  13307. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Elapsed":0}
  13308. {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent"}
  13309. {"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"}
  13310. {"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"}
  13311. {"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"}
  13312. {"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"}
  13313. {"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"}
  13314. {"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}
  13315. {"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"}
  13316. {"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"}
  13317. {"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"}
  13318. {"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"}
  13319. {"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}
  13320. {"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"}
  13321. {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Elapsed":0}
  13322. {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages"}
  13323. {"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"}
  13324. {"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"}
  13325. {"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"}
  13326. {"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"}
  13327. {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Elapsed":0}
  13328. {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45"}
  13329. {"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"}
  13330. {"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"}
  13331. {"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"}
  13332. {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Elapsed":0}
  13333. {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache"}
  13334. {"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"}
  13335. {"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"}
  13336. {"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"}
  13337. {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Elapsed":0}
  13338. {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB"}
  13339. {"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"}
  13340. {"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"}
  13341. {"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"}
  13342. {"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"}
  13343. {"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"}
  13344. {"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"}
  13345. {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Elapsed":0.53}
  13346. {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID"}
  13347. {"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"}
  13348. {"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"}
  13349. {"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"}
  13350. {"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"}
  13351. {"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"}
  13352. {"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"}
  13353. {"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"}
  13354. {"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"}
  13355. {"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"}
  13356. {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Elapsed":0}
  13357. {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession"}
  13358. {"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"}
  13359. {"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"}
  13360. {"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"}
  13361. {"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"}
  13362. {"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"}
  13363. {"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"}
  13364. {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Elapsed":1}
  13365. {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation"}
  13366. {"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"}
  13367. {"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"}
  13368. {"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"}
  13369. {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Elapsed":0}
  13370. {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation"}
  13371. {"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"}
  13372. {"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"}
  13373. {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Elapsed":0}
  13374. {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate"}
  13375. {"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"}
  13376. {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate"}
  13377. {"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"}
  13378. {"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"}
  13379. {"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}
  13380. {"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"}
  13381. {"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"}
  13382. {"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"}
  13383. {"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}
  13384. {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected"}
  13385. {"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"}
  13386. {"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"}
  13387. {"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}
  13388. {"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"}
  13389. {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Elapsed":0.02}
  13390. {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility"}
  13391. {"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"}
  13392. {"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"}
  13393. {"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"}
  13394. {"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"}
  13395. {"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"}
  13396. {"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"}
  13397. {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Elapsed":0.01}
  13398. {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated"}
  13399. {"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"}
  13400. {"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"}
  13401. {"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"}
  13402. {"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"}
  13403. {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Elapsed":0.01}
  13404. {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed"}
  13405. {"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"}
  13406. {"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"}
  13407. {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Elapsed":0}
  13408. {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS"}
  13409. {"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"}
  13410. {"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"}
  13411. {"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"}
  13412. {"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"}
  13413. {"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"}
  13414. {"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"}
  13415. {"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"}
  13416. {"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"}
  13417. {"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"}
  13418. {"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"}
  13419. {"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"}
  13420. {"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"}
  13421. {"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"}
  13422. {"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"}
  13423. {"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"}
  13424. {"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"}
  13425. {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Elapsed":1}
  13426. {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial"}
  13427. {"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"}
  13428. {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough"}
  13429. {"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"}
  13430. {"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"}
  13431. {"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"}
  13432. {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Elapsed":0}
  13433. {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool"}
  13434. {"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"}
  13435. {"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"}
  13436. {"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}
  13437. {"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"}
  13438. {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Elapsed":0}
  13439. {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy"}
  13440. {"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"}
  13441. {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http"}
  13442. {"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"}
  13443. {"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"}
  13444. {"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"}
  13445. {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Elapsed":0}
  13446. {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https"}
  13447. {"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"}
  13448. {"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"}
  13449. {"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"}
  13450. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Elapsed":0}
  13451. {"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"}
  13452. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Elapsed":0.01}
  13453. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError"}
  13454. {"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"}
  13455. {"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"}
  13456. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Elapsed":0}
  13457. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary"}
  13458. {"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"}
  13459. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error"}
  13460. {"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"}
  13461. {"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"}
  13462. {"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}
  13463. {"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"}
  13464. {"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"}
  13465. {"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"}
  13466. {"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}
  13467. {"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"}
  13468. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Elapsed":0}
  13469. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle"}
  13470. {"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"}
  13471. {"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"}
  13472. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Elapsed":0}
  13473. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat"}
  13474. {"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"}
  13475. {"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"}
  13476. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Elapsed":0}
  13477. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval"}
  13478. {"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"}
  13479. {"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"}
  13480. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Elapsed":0}
  13481. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants"}
  13482. {"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"}
  13483. {"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"}
  13484. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Elapsed":0}
  13485. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards"}
  13486. {"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"}
  13487. {"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"}
  13488. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Elapsed":0}
  13489. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground"}
  13490. {"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"}
  13491. {"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"}
  13492. {"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}
  13493. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive"}
  13494. {"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"}
  13495. {"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"}
  13496. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Elapsed":0}
  13497. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero"}
  13498. {"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"}
  13499. {"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"}
  13500. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Elapsed":0}
  13501. {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync"}
  13502. {"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"}
  13503. {"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"}
  13504. {"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}
  13505. {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown"}
  13506. {"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"}
  13507. {"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"}
  13508. {"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}
  13509. {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress"}
  13510. {"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"}
  13511. {"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"}
  13512. {"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}
  13513. {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics"}
  13514. {"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"}
  13515. {"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"}
  13516. {"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}
  13517. {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease"}
  13518. {"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"}
  13519. {"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"}
  13520. {"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}
  13521. {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial"}
  13522. {"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"}
  13523. {"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"}
  13524. {"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}
  13525. {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter"}
  13526. {"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"}
  13527. {"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"}
  13528. {"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}
  13529. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration"}
  13530. {"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"}
  13531. {"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"}
  13532. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Elapsed":0}
  13533. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse"}
  13534. {"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"}
  13535. {"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"}
  13536. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Elapsed":0}
  13537. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures"}
  13538. {"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"}
  13539. {"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"}
  13540. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Elapsed":0}
  13541. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata"}
  13542. {"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"}
  13543. {"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"}
  13544. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Elapsed":0}
  13545. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity"}
  13546. {"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"}
  13547. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation"}
  13548. {"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"}
  13549. {"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"}
  13550. {"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}
  13551. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen"}
  13552. {"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"}
  13553. {"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"}
  13554. {"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}
  13555. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore"}
  13556. {"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"}
  13557. {"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"}
  13558. {"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}
  13559. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread"}
  13560. {"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"}
  13561. {"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"}
  13562. {"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}
  13563. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request"}
  13564. {"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"}
  13565. {"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"}
  13566. {"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}
  13567. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window"}
  13568. {"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"}
  13569. {"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"}
  13570. {"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}
  13571. {"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"}
  13572. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Elapsed":0}
  13573. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity"}
  13574. {"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"}
  13575. {"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"}
  13576. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Elapsed":0}
  13577. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity"}
  13578. {"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"}
  13579. {"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"}
  13580. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Elapsed":0}
  13581. {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures"}
  13582. {"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"}
  13583. {"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"}
  13584. {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Elapsed":0}
  13585. {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection"}
  13586. {"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"}
  13587. {"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"}
  13588. {"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}
  13589. {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy"}
  13590. {"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"}
  13591. {"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"}
  13592. {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Elapsed":0}
  13593. {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable"}
  13594. {"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"}
  13595. {"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"}
  13596. {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Elapsed":0}
  13597. {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly"}
  13598. {"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"}
  13599. {"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"}
  13600. {"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}
  13601. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull"}
  13602. {"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"}
  13603. {"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"}
  13604. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Elapsed":0}
  13605. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn"}
  13606. {"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"}
  13607. {"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"}
  13608. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Elapsed":0}
  13609. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches"}
  13610. {"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"}
  13611. {"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"}
  13612. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Elapsed":0}
  13613. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount"}
  13614. {"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"}
  13615. {"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"}
  13616. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Elapsed":0}
  13617. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap"}
  13618. {"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"}
  13619. {"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"}
  13620. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Elapsed":0}
  13621. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap"}
  13622. {"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"}
  13623. {"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"}
  13624. {"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}
  13625. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero"}
  13626. {"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"}
  13627. {"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"}
  13628. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Elapsed":0}
  13629. {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead"}
  13630. {"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"}
  13631. {"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"}
  13632. {"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}
  13633. {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext"}
  13634. {"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"}
  13635. {"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"}
  13636. {"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}
  13637. {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout"}
  13638. {"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"}
  13639. {"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"}
  13640. {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Elapsed":0}
  13641. {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently"}
  13642. {"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"}
  13643. {"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"}
  13644. {"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}
  13645. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn"}
  13646. {"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"}
  13647. {"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"}
  13648. {"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}
  13649. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire"}
  13650. {"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"}
  13651. {"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"}
  13652. {"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}
  13653. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection"}
  13654. {"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"}
  13655. {"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"}
  13656. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Elapsed":0}
  13657. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches"}
  13658. {"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"}
  13659. {"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"}
  13660. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Elapsed":0}
  13661. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries"}
  13662. {"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"}
  13663. {"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"}
  13664. {"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}
  13665. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap"}
  13666. {"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"}
  13667. {"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"}
  13668. {"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}
  13669. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured"}
  13670. {"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"}
  13671. {"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"}
  13672. {"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}
  13673. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close"}
  13674. {"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"}
  13675. {"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"}
  13676. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Elapsed":0}
  13677. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap"}
  13678. {"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"}
  13679. {"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"}
  13680. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Elapsed":0}
  13681. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats"}
  13682. {"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"}
  13683. {"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"}
  13684. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Elapsed":0}
  13685. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad"}
  13686. {"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"}
  13687. {"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"}
  13688. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Elapsed":0}
  13689. {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel"}
  13690. {"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"}
  13691. {"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"}
  13692. {"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}
  13693. {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections"}
  13694. {"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"}
  13695. {"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"}
  13696. {"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}
  13697. {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit"}
  13698. {"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"}
  13699. {"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"}
  13700. {"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}
  13701. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches"}
  13702. {"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"}
  13703. {"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"}
  13704. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Elapsed":0}
  13705. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches"}
  13706. {"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"}
  13707. {"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"}
  13708. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Elapsed":0}
  13709. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches"}
  13710. {"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"}
  13711. {"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"}
  13712. {"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}
  13713. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches"}
  13714. {"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"}
  13715. {"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"}
  13716. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Elapsed":0}
  13717. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards"}
  13718. {"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"}
  13719. {"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"}
  13720. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Elapsed":0}
  13721. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction"}
  13722. {"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"}
  13723. {"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"}
  13724. {"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}
  13725. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches"}
  13726. {"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"}
  13727. {"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"}
  13728. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Elapsed":0}
  13729. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease"}
  13730. {"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"}
  13731. {"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"}
  13732. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Elapsed":0}
  13733. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn"}
  13734. {"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"}
  13735. {"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"}
  13736. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Elapsed":0}
  13737. {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches"}
  13738. {"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"}
  13739. {"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"}
  13740. {"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}
  13741. {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches"}
  13742. {"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"}
  13743. {"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"}
  13744. {"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}
  13745. {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection"}
  13746. {"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"}
  13747. {"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"}
  13748. {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Elapsed":0}
  13749. {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics"}
  13750. {"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"}
  13751. {"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"}
  13752. {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Elapsed":0}
  13753. {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled"}
  13754. {"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"}
  13755. {"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"}
  13756. {"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"}
  13757. {"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"}
  13758. {"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"}
  13759. {"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"}
  13760. {"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"}
  13761. {"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"}
  13762. {"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"}
  13763. {"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"}
  13764. {"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"}
  13765. {"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"}
  13766. {"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"}
  13767. {"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"}
  13768. {"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"}
  13769. {"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"}
  13770. {"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"}
  13771. {"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"}
  13772. {"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"}
  13773. {"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"}
  13774. {"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"}
  13775. {"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"}
  13776. {"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"}
  13777. {"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"}
  13778. {"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"}
  13779. {"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"}
  13780. {"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"}
  13781. {"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"}
  13782. {"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"}
  13783. {"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"}
  13784. {"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"}
  13785. {"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"}
  13786. {"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"}
  13787. {"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"}
  13788. {"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"}
  13789. {"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}
  13790. {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled"}
  13791. {"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"}
  13792. {"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"}
  13793. {"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"}
  13794. {"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}
  13795. {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce"}
  13796. {"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"}
  13797. {"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"}
  13798. {"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"}
  13799. {"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"}
  13800. {"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"}
  13801. {"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}
  13802. {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce"}
  13803. {"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"}
  13804. {"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"}
  13805. {"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"}
  13806. {"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"}
  13807. {"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"}
  13808. {"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}
  13809. {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled"}
  13810. {"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"}
  13811. {"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"}
  13812. {"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"}
  13813. {"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}
  13814. {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP"}
  13815. {"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"}
  13816. {"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"}
  13817. {"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"}
  13818. {"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"}
  13819. {"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"}
  13820. {"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"}
  13821. {"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"}
  13822. {"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"}
  13823. {"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"}
  13824. {"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"}
  13825. {"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}
  13826. {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS"}
  13827. {"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"}
  13828. {"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"}
  13829. {"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"}
  13830. {"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"}
  13831. {"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"}
  13832. {"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"}
  13833. {"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"}
  13834. {"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"}
  13835. {"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"}
  13836. {"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"}
  13837. {"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"}
  13838. {"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"}
  13839. {"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"}
  13840. {"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"}
  13841. {"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"}
  13842. {"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"}
  13843. {"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"}
  13844. {"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"}
  13845. {"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"}
  13846. {"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"}
  13847. {"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"}
  13848. {"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"}
  13849. {"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"}
  13850. {"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"}
  13851. {"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"}
  13852. {"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"}
  13853. {"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"}
  13854. {"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"}
  13855. {"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"}
  13856. {"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"}
  13857. {"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"}
  13858. {"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"}
  13859. {"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"}
  13860. {"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"}
  13861. {"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"}
  13862. {"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}
  13863. {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled"}
  13864. {"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"}
  13865. {"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"}
  13866. {"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}
  13867. {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver"}
  13868. {"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"}
  13869. {"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"}
  13870. {"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"}
  13871. {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Elapsed":0}
  13872. {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError"}
  13873. {"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"}
  13874. {"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"}
  13875. {"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"}
  13876. {"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"}
  13877. {"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"}
  13878. {"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"}
  13879. {"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"}
  13880. {"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"}
  13881. {"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"}
  13882. {"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}
  13883. {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP"}
  13884. {"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"}
  13885. {"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"}
  13886. {"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"}
  13887. {"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"}
  13888. {"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"}
  13889. {"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"}
  13890. {"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"}
  13891. {"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"}
  13892. {"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"}
  13893. {"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"}
  13894. {"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"}
  13895. {"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"}
  13896. {"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"}
  13897. {"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"}
  13898. {"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"}
  13899. {"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"}
  13900. {"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"}
  13901. {"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"}
  13902. {"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"}
  13903. {"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"}
  13904. {"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"}
  13905. {"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"}
  13906. {"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"}
  13907. {"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"}
  13908. {"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"}
  13909. {"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"}
  13910. {"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"}
  13911. {"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"}
  13912. {"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"}
  13913. {"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"}
  13914. {"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"}
  13915. {"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"}
  13916. {"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"}
  13917. {"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"}
  13918. {"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"}
  13919. {"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"}
  13920. {"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"}
  13921. {"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"}
  13922. {"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"}
  13923. {"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"}
  13924. {"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"}
  13925. {"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"}
  13926. {"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"}
  13927. {"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"}
  13928. {"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"}
  13929. {"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"}
  13930. {"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"}
  13931. {"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"}
  13932. {"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"}
  13933. {"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"}
  13934. {"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"}
  13935. {"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"}
  13936. {"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"}
  13937. {"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"}
  13938. {"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"}
  13939. {"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"}
  13940. {"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"}
  13941. {"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"}
  13942. {"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"}
  13943. {"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"}
  13944. {"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"}
  13945. {"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"}
  13946. {"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"}
  13947. {"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"}
  13948. {"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"}
  13949. {"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"}
  13950. {"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"}
  13951. {"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"}
  13952. {"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"}
  13953. {"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"}
  13954. {"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"}
  13955. {"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}
  13956. {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP"}
  13957. {"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"}
  13958. {"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"}
  13959. {"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"}
  13960. {"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"}
  13961. {"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"}
  13962. {"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"}
  13963. {"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"}
  13964. {"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"}
  13965. {"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"}
  13966. {"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"}
  13967. {"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"}
  13968. {"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"}
  13969. {"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"}
  13970. {"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"}
  13971. {"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"}
  13972. {"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"}
  13973. {"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"}
  13974. {"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"}
  13975. {"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"}
  13976. {"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"}
  13977. {"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"}
  13978. {"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"}
  13979. {"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"}
  13980. {"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"}
  13981. {"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"}
  13982. {"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"}
  13983. {"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"}
  13984. {"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"}
  13985. {"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"}
  13986. {"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"}
  13987. {"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"}
  13988. {"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"}
  13989. {"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"}
  13990. {"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"}
  13991. {"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"}
  13992. {"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"}
  13993. {"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"}
  13994. {"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"}
  13995. {"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"}
  13996. {"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"}
  13997. {"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"}
  13998. {"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"}
  13999. {"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"}
  14000. {"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"}
  14001. {"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"}
  14002. {"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"}
  14003. {"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"}
  14004. {"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"}
  14005. {"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"}
  14006. {"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"}
  14007. {"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"}
  14008. {"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"}
  14009. {"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"}
  14010. {"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"}
  14011. {"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"}
  14012. {"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"}
  14013. {"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"}
  14014. {"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"}
  14015. {"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"}
  14016. {"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}
  14017. {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP"}
  14018. {"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"}
  14019. {"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"}
  14020. {"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"}
  14021. {"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"}
  14022. {"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"}
  14023. {"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"}
  14024. {"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"}
  14025. {"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"}
  14026. {"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"}
  14027. {"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"}
  14028. {"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"}
  14029. {"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"}
  14030. {"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"}
  14031. {"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}
  14032. {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP"}
  14033. {"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"}
  14034. {"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"}
  14035. {"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"}
  14036. {"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"}
  14037. {"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"}
  14038. {"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"}
  14039. {"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"}
  14040. {"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"}
  14041. {"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"}
  14042. {"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"}
  14043. {"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"}
  14044. {"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"}
  14045. {"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"}
  14046. {"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"}
  14047. {"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"}
  14048. {"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"}
  14049. {"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"}
  14050. {"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"}
  14051. {"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"}
  14052. {"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"}
  14053. {"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"}
  14054. {"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"}
  14055. {"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"}
  14056. {"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"}
  14057. {"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"}
  14058. {"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"}
  14059. {"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"}
  14060. {"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"}
  14061. {"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"}
  14062. {"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"}
  14063. {"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"}
  14064. {"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"}
  14065. {"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"}
  14066. {"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"}
  14067. {"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"}
  14068. {"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"}
  14069. {"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"}
  14070. {"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"}
  14071. {"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"}
  14072. {"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"}
  14073. {"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"}
  14074. {"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"}
  14075. {"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"}
  14076. {"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"}
  14077. {"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"}
  14078. {"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"}
  14079. {"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"}
  14080. {"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"}
  14081. {"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"}
  14082. {"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"}
  14083. {"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"}
  14084. {"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"}
  14085. {"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"}
  14086. {"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"}
  14087. {"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"}
  14088. {"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"}
  14089. {"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"}
  14090. {"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"}
  14091. {"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"}
  14092. {"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"}
  14093. {"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"}
  14094. {"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"}
  14095. {"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"}
  14096. {"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"}
  14097. {"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"}
  14098. {"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}
  14099. {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID"}
  14100. {"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"}
  14101. {"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"}
  14102. {"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"}
  14103. {"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"}
  14104. {"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"}
  14105. {"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"}
  14106. {"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"}
  14107. {"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"}
  14108. {"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"}
  14109. {"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"}
  14110. {"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"}
  14111. {"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"}
  14112. {"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"}
  14113. {"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"}
  14114. {"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"}
  14115. {"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"}
  14116. {"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"}
  14117. {"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"}
  14118. {"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"}
  14119. {"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"}
  14120. {"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"}
  14121. {"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"}
  14122. {"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"}
  14123. {"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"}
  14124. {"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"}
  14125. {"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"}
  14126. {"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}
  14127. {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput"}
  14128. {"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"}
  14129. {"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"}
  14130. {"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"}
  14131. {"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"}
  14132. {"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"}
  14133. {"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"}
  14134. {"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"}
  14135. {"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"}
  14136. {"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"}
  14137. {"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"}
  14138. {"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"}
  14139. {"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"}
  14140. {"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"}
  14141. {"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"}
  14142. {"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"}
  14143. {"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"}
  14144. {"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"}
  14145. {"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"}
  14146. {"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}
  14147. {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID"}
  14148. {"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"}
  14149. {"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"}
  14150. {"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"}
  14151. {"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"}
  14152. {"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"}
  14153. {"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"}
  14154. {"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"}
  14155. {"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"}
  14156. {"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"}
  14157. {"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"}
  14158. {"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"}
  14159. {"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"}
  14160. {"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"}
  14161. {"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"}
  14162. {"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"}
  14163. {"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"}
  14164. {"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"}
  14165. {"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}
  14166. {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce"}
  14167. {"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"}
  14168. {"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"}
  14169. {"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"}
  14170. {"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"}
  14171. {"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"}
  14172. {"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"}
  14173. {"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"}
  14174. {"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"}
  14175. {"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"}
  14176. {"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"}
  14177. {"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"}
  14178. {"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"}
  14179. {"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"}
  14180. {"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"}
  14181. {"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"}
  14182. {"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"}
  14183. {"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"}
  14184. {"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"}
  14185. {"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"}
  14186. {"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"}
  14187. {"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"}
  14188. {"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"}
  14189. {"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"}
  14190. {"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"}
  14191. {"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"}
  14192. {"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"}
  14193. {"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"}
  14194. {"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"}
  14195. {"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}
  14196. {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce"}
  14197. {"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"}
  14198. {"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"}
  14199. {"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"}
  14200. {"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"}
  14201. {"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"}
  14202. {"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"}
  14203. {"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"}
  14204. {"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"}
  14205. {"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"}
  14206. {"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"}
  14207. {"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"}
  14208. {"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"}
  14209. {"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"}
  14210. {"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"}
  14211. {"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"}
  14212. {"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"}
  14213. {"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"}
  14214. {"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"}
  14215. {"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"}
  14216. {"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"}
  14217. {"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"}
  14218. {"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"}
  14219. {"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"}
  14220. {"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"}
  14221. {"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"}
  14222. {"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}
  14223. {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem"}
  14224. {"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"}
  14225. {"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"}
  14226. {"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"}
  14227. {"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"}
  14228. {"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"}
  14229. {"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"}
  14230. {"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"}
  14231. {"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"}
  14232. {"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"}
  14233. {"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"}
  14234. {"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"}
  14235. {"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"}
  14236. {"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"}
  14237. {"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"}
  14238. {"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"}
  14239. {"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"}
  14240. {"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"}
  14241. {"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}
  14242. {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary"}
  14243. {"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"}
  14244. {"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"}
  14245. {"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"}
  14246. {"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"}
  14247. {"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"}
  14248. {"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"}
  14249. {"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"}
  14250. {"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"}
  14251. {"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"}
  14252. {"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"}
  14253. {"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"}
  14254. {"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"}
  14255. {"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"}
  14256. {"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"}
  14257. {"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"}
  14258. {"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"}
  14259. {"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"}
  14260. {"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"}
  14261. {"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"}
  14262. {"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"}
  14263. {"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"}
  14264. {"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"}
  14265. {"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"}
  14266. {"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"}
  14267. {"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"}
  14268. {"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}
  14269. {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput"}
  14270. {"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"}
  14271. {"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"}
  14272. {"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"}
  14273. {"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"}
  14274. {"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"}
  14275. {"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"}
  14276. {"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"}
  14277. {"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"}
  14278. {"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"}
  14279. {"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"}
  14280. {"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"}
  14281. {"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"}
  14282. {"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"}
  14283. {"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"}
  14284. {"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"}
  14285. {"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"}
  14286. {"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"}
  14287. {"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"}
  14288. {"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"}
  14289. {"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"}
  14290. {"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"}
  14291. {"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"}
  14292. {"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"}
  14293. {"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"}
  14294. {"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"}
  14295. {"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"}
  14296. {"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}
  14297. {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve"}
  14298. {"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"}
  14299. {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先"}
  14300. {"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"}
  14301. {"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"}
  14302. {"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}
  14303. {"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开关"}
  14304. {"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"}
  14305. {"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"}
  14306. {"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}
  14307. {"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"}
  14308. {"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"}
  14309. {"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"}
  14310. {"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}
  14311. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1"}
  14312. {"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"}
  14313. {"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"}
  14314. {"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}
  14315. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定"}
  14316. {"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"}
  14317. {"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"}
  14318. {"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}
  14319. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP"}
  14320. {"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"}
  14321. {"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"}
  14322. {"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}
  14323. {"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"}
  14324. {"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"}
  14325. {"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"}
  14326. {"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}
  14327. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP"}
  14328. {"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"}
  14329. {"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"}
  14330. {"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}
  14331. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP"}
  14332. {"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"}
  14333. {"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"}
  14334. {"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}
  14335. {"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专用开关"}
  14336. {"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"}
  14337. {"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"}
  14338. {"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}
  14339. {"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"}
  14340. {"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"}
  14341. {"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"}
  14342. {"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}
  14343. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制"}
  14344. {"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"}
  14345. {"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"}
  14346. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Elapsed":0}
  14347. {"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"}
  14348. {"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"}
  14349. {"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"}
  14350. {"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}
  14351. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP"}
  14352. {"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"}
  14353. {"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"}
  14354. {"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}
  14355. {"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"}
  14356. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Elapsed":0}
  14357. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2"}
  14358. {"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"}
  14359. {"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"}
  14360. {"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"}
  14361. {"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"}
  14362. {"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}
  14363. {"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"}
  14364. {"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"}
  14365. {"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"}
  14366. {"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}
  14367. {"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"}
  14368. {"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"}
  14369. {"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"}
  14370. {"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}
  14371. {"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"}
  14372. {"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"}
  14373. {"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"}
  14374. {"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}
  14375. {"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"}
  14376. {"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"}
  14377. {"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"}
  14378. {"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}
  14379. {"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"}
  14380. {"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"}
  14381. {"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"}
  14382. {"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}
  14383. {"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"}
  14384. {"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}
  14385. {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit"}
  14386. {"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"}
  14387. {"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"}
  14388. {"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"}
  14389. {"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"}
  14390. {"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"}
  14391. {"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"}
  14392. {"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"}
  14393. {"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"}
  14394. {"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"}
  14395. {"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"}
  14396. {"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"}
  14397. {"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"}
  14398. {"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"}
  14399. {"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"}
  14400. {"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"}
  14401. {"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}
  14402. {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit"}
  14403. {"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"}
  14404. {"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"}
  14405. {"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"}
  14406. {"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"}
  14407. {"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"}
  14408. {"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"}
  14409. {"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"}
  14410. {"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"}
  14411. {"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"}
  14412. {"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"}
  14413. {"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"}
  14414. {"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"}
  14415. {"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}
  14416. {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient"}
  14417. {"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"}
  14418. {"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"}
  14419. {"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"}
  14420. {"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"}
  14421. {"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"}
  14422. {"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"}
  14423. {"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"}
  14424. {"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"}
  14425. {"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"}
  14426. {"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"}
  14427. {"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"}
  14428. {"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"}
  14429. {"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"}
  14430. {"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"}
  14431. {"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"}
  14432. {"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"}
  14433. {"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"}
  14434. {"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"}
  14435. {"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"}
  14436. {"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"}
  14437. {"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"}
  14438. {"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"}
  14439. {"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"}
  14440. {"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"}
  14441. {"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"}
  14442. {"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"}
  14443. {"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"}
  14444. {"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"}
  14445. {"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"}
  14446. {"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"}
  14447. {"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"}
  14448. {"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"}
  14449. {"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"}
  14450. {"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"}
  14451. {"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"}
  14452. {"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"}
  14453. {"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"}
  14454. {"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"}
  14455. {"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"}
  14456. {"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"}
  14457. {"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"}
  14458. {"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"}
  14459. {"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"}
  14460. {"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"}
  14461. {"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"}
  14462. {"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"}
  14463. {"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"}
  14464. {"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"}
  14465. {"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"}
  14466. {"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"}
  14467. {"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"}
  14468. {"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"}
  14469. {"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"}
  14470. {"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"}
  14471. {"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"}
  14472. {"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"}
  14473. {"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"}
  14474. {"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"}
  14475. {"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"}
  14476. {"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"}
  14477. {"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"}
  14478. {"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"}
  14479. {"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"}
  14480. {"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"}
  14481. {"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"}
  14482. {"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"}
  14483. {"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"}
  14484. {"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"}
  14485. {"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"}
  14486. {"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"}
  14487. {"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"}
  14488. {"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"}
  14489. {"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"}
  14490. {"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"}
  14491. {"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"}
  14492. {"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"}
  14493. {"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"}
  14494. {"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"}
  14495. {"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"}
  14496. {"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"}
  14497. {"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"}
  14498. {"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"}
  14499. {"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"}
  14500. {"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"}
  14501. {"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"}
  14502. {"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"}
  14503. {"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"}
  14504. {"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"}
  14505. {"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"}
  14506. {"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"}
  14507. {"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"}
  14508. {"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"}
  14509. {"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}
  14510. {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit"}
  14511. {"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"}
  14512. {"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"}
  14513. {"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"}
  14514. {"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"}
  14515. {"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"}
  14516. {"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"}
  14517. {"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"}
  14518. {"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"}
  14519. {"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"}
  14520. {"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"}
  14521. {"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"}
  14522. {"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}
  14523. {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit"}
  14524. {"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"}
  14525. {"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"}
  14526. {"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}
  14527. {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit"}
  14528. {"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"}
  14529. {"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"}
  14530. {"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}
  14531. {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites"}
  14532. {"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"}
  14533. {"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"}
  14534. {"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}
  14535. {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit"}
  14536. {"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"}
  14537. {"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"}
  14538. {"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}
  14539. {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit"}
  14540. {"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"}
  14541. {"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"}
  14542. {"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}
  14543. {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429"}
  14544. {"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"}
  14545. {"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"}
  14546. {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Elapsed":0}
  14547. {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline"}
  14548. {"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"}
  14549. {"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"}
  14550. {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Elapsed":0}
  14551. {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded"}
  14552. {"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"}
  14553. {"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"}
  14554. {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Elapsed":0.1}
  14555. {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount"}
  14556. {"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"}
  14557. {"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"}
  14558. {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Elapsed":0}
  14559. {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances"}
  14560. {"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"}
  14561. {"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"}
  14562. {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Elapsed":0}
  14563. {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL"}
  14564. {"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"}
  14565. {"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"}
  14566. {"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}
  14567. {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL"}
  14568. {"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"}
  14569. {"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"}
  14570. {"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}
  14571. {"Time":"2026-09-12T11:39:32.9782398+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL"}
  14572. {"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"}
  14573. {"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"}
  14574. {"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}
  14575. {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss"}
  14576. {"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"}
  14577. {"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"}
  14578. {"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}
  14579. {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally"}
  14580. {"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"}
  14581. {"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"}
  14582. {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Elapsed":0}
  14583. {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout"}
  14584. {"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"}
  14585. {"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"}
  14586. {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Elapsed":0}
  14587. {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext"}
  14588. {"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"}
  14589. {"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"}
  14590. {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Elapsed":0}
  14591. {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn"}
  14592. {"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"}
  14593. {"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"}
  14594. {"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}
  14595. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited"}
  14596. {"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"}
  14597. {"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"}
  14598. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Elapsed":0}
  14599. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation"}
  14600. {"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"}
  14601. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空"}
  14602. {"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"}
  14603. {"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"}
  14604. {"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}
  14605. {"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_必填"}
  14606. {"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"}
  14607. {"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"}
  14608. {"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}
  14609. {"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"}
  14610. {"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"}
  14611. {"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"}
  14612. {"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}
  14613. {"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"}
  14614. {"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"}
  14615. {"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"}
  14616. {"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}
  14617. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥"}
  14618. {"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"}
  14619. {"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"}
  14620. {"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}
  14621. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界"}
  14622. {"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"}
  14623. {"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"}
  14624. {"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}
  14625. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界"}
  14626. {"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"}
  14627. {"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"}
  14628. {"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}
  14629. {"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"}
  14630. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Elapsed":0}
  14631. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination"}
  14632. {"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"}
  14633. {"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"}
  14634. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Elapsed":0}
  14635. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable"}
  14636. {"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"}
  14637. {"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"}
  14638. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Elapsed":0}
  14639. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats"}
  14640. {"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"}
  14641. {"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"}
  14642. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Elapsed":0}
  14643. {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility"}
  14644. {"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"}
  14645. {"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"}
  14646. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Elapsed":0}
  14647. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings"}
  14648. {"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"}
  14649. {"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"}
  14650. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Elapsed":0}
  14651. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking"}
  14652. {"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"}
  14653. {"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"}
  14654. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Elapsed":0}
  14655. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately"}
  14656. {"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"}
  14657. {"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"}
  14658. {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Elapsed":0}
  14659. {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts"}
  14660. {"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"}
  14661. {"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"}
  14662. {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Elapsed":0}
  14663. {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth"}
  14664. {"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"}
  14665. {"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"}
  14666. {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Elapsed":0}
  14667. {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration"}
  14668. {"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"}
  14669. {"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"}
  14670. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Elapsed":0}
  14671. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing"}
  14672. {"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"}
  14673. {"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"}
  14674. {"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"}
  14675. {"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"}
  14676. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Elapsed":0}
  14677. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex"}
  14678. {"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"}
  14679. {"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"}
  14680. {"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"}
  14681. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Elapsed":0}
  14682. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo"}
  14683. {"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"}
  14684. {"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"}
  14685. {"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"}
  14686. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Elapsed":0}
  14687. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback"}
  14688. {"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"}
  14689. {"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"}
  14690. {"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"}
  14691. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Elapsed":0}
  14692. {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates"}
  14693. {"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"}
  14694. {"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"}
  14695. {"Time":"2026-09-12T11:39:33.0943017+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Elapsed":0}
  14696. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy"}
  14697. {"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"}
  14698. {"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"}
  14699. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Elapsed":0}
  14700. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe"}
  14701. {"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"}
  14702. {"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"}
  14703. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Elapsed":0}
  14704. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe"}
  14705. {"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"}
  14706. {"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"}
  14707. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Elapsed":0}
  14708. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting"}
  14709. {"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"}
  14710. {"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"}
  14711. {"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"}
  14712. {"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"}
  14713. {"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}
  14714. {"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"}
  14715. {"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"}
  14716. {"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"}
  14717. {"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}
  14718. {"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"}
  14719. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Elapsed":0}
  14720. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients"}
  14721. {"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"}
  14722. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启"}
  14723. {"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"}
  14724. {"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"}
  14725. {"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}
  14726. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false"}
  14727. {"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"}
  14728. {"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"}
  14729. {"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}
  14730. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false"}
  14731. {"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"}
  14732. {"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"}
  14733. {"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}
  14734. {"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"}
  14735. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Elapsed":0}
  14736. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals"}
  14737. {"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"}
  14738. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)"}
  14739. {"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"}
  14740. {"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"}
  14741. {"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}
  14742. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用"}
  14743. {"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"}
  14744. {"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"}
  14745. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Elapsed":0}
  14746. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子"}
  14747. {"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"}
  14748. {"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"}
  14749. {"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}
  14750. {"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"}
  14751. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Elapsed":0}
  14752. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals"}
  14753. {"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"}
  14754. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动"}
  14755. {"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"}
  14756. {"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"}
  14757. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Elapsed":0}
  14758. {"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"}
  14759. {"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"}
  14760. {"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"}
  14761. {"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}
  14762. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)"}
  14763. {"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"}
  14764. {"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"}
  14765. {"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}
  14766. {"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"}
  14767. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Elapsed":0}
  14768. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON"}
  14769. {"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"}
  14770. {"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"}
  14771. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Elapsed":0}
  14772. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON"}
  14773. {"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"}
  14774. {"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"}
  14775. {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Elapsed":0}
  14776. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest"}
  14777. {"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"}
  14778. {"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"}
  14779. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Elapsed":0}
  14780. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved"}
  14781. {"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"}
  14782. {"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"}
  14783. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Elapsed":0}
  14784. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"}
  14785. {"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"}
  14786. {"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"}
  14787. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"}
  14788. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth"}
  14789. {"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"}
  14790. {"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"}
  14791. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Elapsed":0}
  14792. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest"}
  14793. {"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"}
  14794. {"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"}
  14795. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Elapsed":0}
  14796. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"}
  14797. {"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"}
  14798. {"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"}
  14799. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"}
  14800. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"}
  14801. {"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"}
  14802. {"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"}
  14803. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"}
  14804. {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField"}
  14805. {"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"}
  14806. {"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"}
  14807. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Elapsed":0}
  14808. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths"}
  14809. {"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"}
  14810. {"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"}
  14811. {"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"}
  14812. {"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"}
  14813. {"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}
  14814. {"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"}
  14815. {"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"}
  14816. {"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"}
  14817. {"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}
  14818. {"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"}
  14819. {"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"}
  14820. {"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"}
  14821. {"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}
  14822. {"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"}
  14823. {"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"}
  14824. {"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"}
  14825. {"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}
  14826. {"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"}
  14827. {"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"}
  14828. {"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"}
  14829. {"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}
  14830. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x"}
  14831. {"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"}
  14832. {"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"}
  14833. {"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}
  14834. {"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"}
  14835. {"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"}
  14836. {"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"}
  14837. {"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}
  14838. {"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"}
  14839. {"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"}
  14840. {"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"}
  14841. {"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}
  14842. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double"}
  14843. {"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"}
  14844. {"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"}
  14845. {"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}
  14846. {"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"}
  14847. {"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"}
  14848. {"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"}
  14849. {"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}
  14850. {"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"}
  14851. {"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"}
  14852. {"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"}
  14853. {"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}
  14854. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/"}
  14855. {"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"}
  14856. {"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"}
  14857. {"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}
  14858. {"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"}
  14859. {"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"}
  14860. {"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"}
  14861. {"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}
  14862. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses"}
  14863. {"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"}
  14864. {"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"}
  14865. {"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}
  14866. {"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"}
  14867. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Elapsed":0}
  14868. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath"}
  14869. {"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"}
  14870. {"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"}
  14871. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Elapsed":0}
  14872. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape"}
  14873. {"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"}
  14874. {"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"}
  14875. {"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"}
  14876. {"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"}
  14877. {"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}
  14878. {"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"}
  14879. {"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"}
  14880. {"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"}
  14881. {"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}
  14882. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/"}
  14883. {"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"}
  14884. {"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"}
  14885. {"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}
  14886. {"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"}
  14887. {"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"}
  14888. {"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"}
  14889. {"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}
  14890. {"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"}
  14891. {"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"}
  14892. {"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"}
  14893. {"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}
  14894. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses"}
  14895. {"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"}
  14896. {"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"}
  14897. {"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}
  14898. {"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"}
  14899. {"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"}
  14900. {"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"}
  14901. {"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}
  14902. {"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"}
  14903. {"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"}
  14904. {"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"}
  14905. {"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}
  14906. {"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"}
  14907. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Elapsed":0}
  14908. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix"}
  14909. {"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"}
  14910. {"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"}
  14911. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Elapsed":0}
  14912. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload"}
  14913. {"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"}
  14914. {"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"}
  14915. {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Elapsed":0}
  14916. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
  14917. {"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"}
  14918. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
  14919. {"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"}
  14920. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"}
  14921. {"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"}
  14922. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
  14923. {"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"}
  14924. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
  14925. {"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"}
  14926. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
  14927. {"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"}
  14928. {"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"}
  14929. {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
  14930. {"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"}
  14931. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
  14932. {"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"}
  14933. {"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"}
  14934. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Elapsed":0}
  14935. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
  14936. {"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"}
  14937. {"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"}
  14938. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Elapsed":0}
  14939. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
  14940. {"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"}
  14941. {"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"}
  14942. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Elapsed":0}
  14943. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
  14944. {"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"}
  14945. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
  14946. {"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"}
  14947. {"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"}
  14948. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Elapsed":0}
  14949. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
  14950. {"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"}
  14951. {"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"}
  14952. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Elapsed":0}
  14953. {"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"}
  14954. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Elapsed":0}
  14955. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"}
  14956. {"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"}
  14957. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
  14958. {"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"}
  14959. {"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"}
  14960. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Elapsed":0}
  14961. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"}
  14962. {"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"}
  14963. {"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"}
  14964. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Elapsed":0}
  14965. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
  14966. {"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"}
  14967. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"}
  14968. {"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"}
  14969. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
  14970. {"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"}
  14971. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"}
  14972. {"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"}
  14973. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"}
  14974. {"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"}
  14975. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
  14976. {"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"}
  14977. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
  14978. {"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"}
  14979. {"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"}
  14980. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Elapsed":0}
  14981. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
  14982. {"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"}
  14983. {"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"}
  14984. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Elapsed":0}
  14985. {"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"}
  14986. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Elapsed":0}
  14987. {"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"}
  14988. {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Elapsed":0}
  14989. {"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"}
  14990. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Elapsed":0}
  14991. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
  14992. {"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"}
  14993. {"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"}
  14994. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Elapsed":0}
  14995. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"}
  14996. {"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"}
  14997. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"}
  14998. {"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"}
  14999. {"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"}
  15000. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Elapsed":0}
  15001. {"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"}
  15002. {"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"}
  15003. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"}
  15004. {"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"}
  15005. {"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"}
  15006. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Elapsed":0}
  15007. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items"}
  15008. {"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"}
  15009. {"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"}
  15010. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Elapsed":0}
  15011. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"}
  15012. {"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"}
  15013. {"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"}
  15014. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0}
  15015. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
  15016. {"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"}
  15017. {"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"}
  15018. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Elapsed":0}
  15019. {"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"}
  15020. {"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"}
  15021. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"}
  15022. {"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"}
  15023. {"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"}
  15024. {"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}
  15025. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
  15026. {"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"}
  15027. {"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"}
  15028. {"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}
  15029. {"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"}
  15030. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Elapsed":0}
  15031. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
  15032. {"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"}
  15033. {"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"}
  15034. {"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"}
  15035. {"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"}
  15036. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
  15037. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"}
  15038. {"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"}
  15039. {"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"}
  15040. {"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"}
  15041. {"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"}
  15042. {"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}
  15043. {"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"}
  15044. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Elapsed":0}
  15045. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
  15046. {"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"}
  15047. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"}
  15048. {"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"}
  15049. {"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"}
  15050. {"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"}
  15051. {"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"}
  15052. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
  15053. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
  15054. {"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"}
  15055. {"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"}
  15056. {"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}
  15057. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
  15058. {"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"}
  15059. {"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"}
  15060. {"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"}
  15061. {"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"}
  15062. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
  15063. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
  15064. {"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"}
  15065. {"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"}
  15066. {"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}
  15067. {"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"}
  15068. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
  15069. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
  15070. {"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"}
  15071. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
  15072. {"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"}
  15073. {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
  15074. {"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"}
  15075. {"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"}
  15076. {"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"}
  15077. {"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"}
  15078. {"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"}
  15079. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"}
  15080. {"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"}
  15081. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
  15082. {"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"}
  15083. {"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"}
  15084. {"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"}
  15085. {"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"}
  15086. {"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"}
  15087. {"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"}
  15088. {"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}
  15089. {"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"}
  15090. {"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"}
  15091. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
  15092. {"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"}
  15093. {"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"}
  15094. {"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"}
  15095. {"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"}
  15096. {"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"}
  15097. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"}
  15098. {"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"}
  15099. {"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"}
  15100. {"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"}
  15101. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
  15102. {"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"}
  15103. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
  15104. {"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"}
  15105. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"}
  15106. {"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"}
  15107. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"}
  15108. {"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"}
  15109. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"}
  15110. {"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"}
  15111. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
  15112. {"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"}
  15113. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"}
  15114. {"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"}
  15115. {"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"}
  15116. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"}
  15117. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"}
  15118. {"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"}
  15119. {"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"}
  15120. {"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"}
  15121. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
  15122. {"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"}
  15123. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"}
  15124. {"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"}
  15125. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"}
  15126. {"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"}
  15127. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"}
  15128. {"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"}
  15129. {"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"}
  15130. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"}
  15131. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"}
  15132. {"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"}
  15133. {"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"}
  15134. {"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"}
  15135. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"}
  15136. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
  15137. {"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"}
  15138. {"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"}
  15139. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
  15140. {"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"}
  15141. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
  15142. {"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"}
  15143. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
  15144. {"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"}
  15145. {"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"}
  15146. {"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"}
  15147. {"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"}
  15148. {"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"}
  15149. {"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"}
  15150. {"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"}
  15151. {"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"}
  15152. {"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"}
  15153. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"}
  15154. {"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"}
  15155. {"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"}
  15156. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"}
  15157. {"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"}
  15158. {"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"}
  15159. {"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"}
  15160. {"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"}
  15161. {"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"}
  15162. {"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"}
  15163. {"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"}
  15164. {"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"}
  15165. {"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"}
  15166. {"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"}
  15167. {"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"}
  15168. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"}
  15169. {"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"}
  15170. {"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"}
  15171. {"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"}
  15172. {"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"}
  15173. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"}
  15174. {"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"}
  15175. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"}
  15176. {"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"}
  15177. {"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"}
  15178. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"}
  15179. {"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"}
  15180. {"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"}
  15181. {"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"}
  15182. {"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"}
  15183. {"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"}
  15184. {"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"}
  15185. {"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"}
  15186. {"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"}
  15187. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
  15188. {"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"}
  15189. {"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"}
  15190. {"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"}
  15191. {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
  15192. {"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"}
  15193. {"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"}
  15194. {"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}
  15195. {"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"}
  15196. {"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"}
  15197. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
  15198. {"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"}
  15199. {"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"}
  15200. {"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}
  15201. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
  15202. {"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"}
  15203. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"}
  15204. {"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"}
  15205. {"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"}
  15206. {"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"}
  15207. {"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"}
  15208. {"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}
  15209. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"}
  15210. {"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"}
  15211. {"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"}
  15212. {"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"}
  15213. {"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"}
  15214. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"}
  15215. {"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"}
  15216. {"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"}
  15217. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
  15218. {"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"}
  15219. {"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"}
  15220. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Elapsed":0}
  15221. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"}
  15222. {"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"}
  15223. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"}
  15224. {"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"}
  15225. {"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"}
  15226. {"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"}
  15227. {"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"}
  15228. {"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"}
  15229. {"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"}
  15230. {"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}
  15231. {"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"}
  15232. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Elapsed":0}
  15233. {"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"}
  15234. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Elapsed":0}
  15235. {"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"}
  15236. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Elapsed":0}
  15237. {"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"}
  15238. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Elapsed":0}
  15239. {"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"}
  15240. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Elapsed":0}
  15241. {"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"}
  15242. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Elapsed":0}
  15243. {"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"}
  15244. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Elapsed":0}
  15245. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
  15246. {"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"}
  15247. {"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"}
  15248. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Elapsed":0}
  15249. {"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"}
  15250. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Elapsed":0}
  15251. {"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"}
  15252. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Elapsed":0}
  15253. {"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"}
  15254. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Elapsed":0}
  15255. {"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"}
  15256. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Elapsed":0}
  15257. {"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"}
  15258. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Elapsed":0}
  15259. {"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"}
  15260. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Elapsed":0}
  15261. {"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"}
  15262. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0}
  15263. {"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"}
  15264. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Elapsed":0}
  15265. {"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"}
  15266. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Elapsed":0}
  15267. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload"}
  15268. {"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"}
  15269. {"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"}
  15270. {"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"}
  15271. {"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"}
  15272. {"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}
  15273. {"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"}
  15274. {"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}
  15275. {"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"}
  15276. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Elapsed":0}
  15277. {"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"}
  15278. {"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"}
  15279. {"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"}
  15280. {"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"}
  15281. {"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"}
  15282. {"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}
  15283. {"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"}
  15284. {"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"}
  15285. {"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"}
  15286. {"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"}
  15287. {"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"}
  15288. {"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"}
  15289. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing"}
  15290. {"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"}
  15291. {"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"}
  15292. {"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"}
  15293. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"}
  15294. {"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"}
  15295. {"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"}
  15296. {"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"}
  15297. {"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"}
  15298. {"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}
  15299. {"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"}
  15300. {"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}
  15301. {"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"}
  15302. {"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"}
  15303. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"}
  15304. {"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"}
  15305. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"}
  15306. {"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"}
  15307. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"}
  15308. {"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"}
  15309. {"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"}
  15310. {"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"}
  15311. {"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"}
  15312. {"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"}
  15313. {"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"}
  15314. {"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"}
  15315. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"}
  15316. {"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"}
  15317. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
  15318. {"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"}
  15319. {"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"}
  15320. {"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"}
  15321. {"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"}
  15322. {"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}
  15323. {"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"}
  15324. {"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"}
  15325. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"}
  15326. {"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"}
  15327. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"}
  15328. {"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"}
  15329. {"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"}
  15330. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"}
  15331. {"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"}
  15332. {"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"}
  15333. {"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"}
  15334. {"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"}
  15335. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"}
  15336. {"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"}
  15337. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
  15338. {"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"}
  15339. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
  15340. {"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"}
  15341. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"}
  15342. {"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"}
  15343. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
  15344. {"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"}
  15345. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
  15346. {"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"}
  15347. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"}
  15348. {"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"}
  15349. {"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"}
  15350. {"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"}
  15351. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"}
  15352. {"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"}
  15353. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"}
  15354. {"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"}
  15355. {"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"}
  15356. {"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"}
  15357. {"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"}
  15358. {"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"}
  15359. {"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"}
  15360. {"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"}
  15361. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"}
  15362. {"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"}
  15363. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"}
  15364. {"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"}
  15365. {"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"}
  15366. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"}
  15367. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
  15368. {"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"}
  15369. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"}
  15370. {"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"}
  15371. {"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"}
  15372. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"}
  15373. {"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"}
  15374. {"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"}
  15375. {"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"}
  15376. {"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"}
  15377. {"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"}
  15378. {"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"}
  15379. {"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"}
  15380. {"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"}
  15381. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"}
  15382. {"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"}
  15383. {"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"}
  15384. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"}
  15385. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"}
  15386. {"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"}
  15387. {"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"}
  15388. {"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"}
  15389. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
  15390. {"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"}
  15391. {"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"}
  15392. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"}
  15393. {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"}
  15394. {"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"}
  15395. {"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"}
  15396. {"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"}
  15397. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
  15398. {"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"}
  15399. {"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"}
  15400. {"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"}
  15401. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
  15402. {"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"}
  15403. {"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"}
  15404. {"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}
  15405. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
  15406. {"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"}
  15407. {"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"}
  15408. {"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"}
  15409. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
  15410. {"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"}
  15411. {"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"}
  15412. {"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"}
  15413. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
  15414. {"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"}
  15415. {"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"}
  15416. {"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"}
  15417. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
  15418. {"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"}
  15419. {"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"}
  15420. {"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"}
  15421. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
  15422. {"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"}
  15423. {"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"}
  15424. {"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"}
  15425. {"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}
  15426. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
  15427. {"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"}
  15428. {"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"}
  15429. {"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"}
  15430. {"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}
  15431. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
  15432. {"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"}
  15433. {"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"}
  15434. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Elapsed":0}
  15435. {"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"}
  15436. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Elapsed":0}
  15437. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
  15438. {"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"}
  15439. {"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"}
  15440. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Elapsed":0}
  15441. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
  15442. {"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"}
  15443. {"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"}
  15444. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Elapsed":0}
  15445. {"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"}
  15446. {"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"}
  15447. {"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"}
  15448. {"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}
  15449. {"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"}
  15450. {"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"}
  15451. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through"}
  15452. {"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"}
  15453. {"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"}
  15454. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Elapsed":0}
  15455. {"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"}
  15456. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Elapsed":0}
  15457. {"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"}
  15458. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0}
  15459. {"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"}
  15460. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Elapsed":0}
  15461. {"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"}
  15462. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Elapsed":0}
  15463. {"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"}
  15464. {"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}
  15465. {"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"}
  15466. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Elapsed":0}
  15467. {"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"}
  15468. {"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}
  15469. {"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"}
  15470. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Elapsed":0}
  15471. {"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"}
  15472. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Elapsed":0}
  15473. {"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"}
  15474. {"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"}
  15475. {"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"}
  15476. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Elapsed":0}
  15477. {"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"}
  15478. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Elapsed":0}
  15479. {"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"}
  15480. {"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}
  15481. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
  15482. {"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"}
  15483. {"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"}
  15484. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"}
  15485. {"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"}
  15486. {"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"}
  15487. {"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"}
  15488. {"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"}
  15489. {"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"}
  15490. {"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"}
  15491. {"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"}
  15492. {"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"}
  15493. {"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"}
  15494. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Elapsed":0}
  15495. {"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"}
  15496. {"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"}
  15497. {"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"}
  15498. {"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}
  15499. {"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"}
  15500. {"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"}
  15501. {"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"}
  15502. {"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}
  15503. {"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"}
  15504. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Elapsed":0}
  15505. {"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"}
  15506. {"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"}
  15507. {"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"}
  15508. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Elapsed":0}
  15509. {"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"}
  15510. {"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"}
  15511. {"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"}
  15512. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Elapsed":0}
  15513. {"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"}
  15514. {"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"}
  15515. {"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"}
  15516. {"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}
  15517. {"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"}
  15518. {"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"}
  15519. {"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"}
  15520. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0}
  15521. {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"}
  15522. {"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"}
  15523. {"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"}
  15524. {"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"}
  15525. {"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"}
  15526. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"}
  15527. {"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"}
  15528. {"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}
  15529. {"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"}
  15530. {"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}
  15531. {"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"}
  15532. {"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"}
  15533. {"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"}
  15534. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Elapsed":0}
  15535. {"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"}
  15536. {"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"}
  15537. {"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"}
  15538. {"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}
  15539. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"}
  15540. {"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"}
  15541. {"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"}
  15542. {"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"}
  15543. {"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"}
  15544. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
  15545. {"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"}
  15546. {"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"}
  15547. {"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"}
  15548. {"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"}
  15549. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"}
  15550. {"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"}
  15551. {"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"}
  15552. {"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}
  15553. {"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"}
  15554. {"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}
  15555. {"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"}
  15556. {"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"}
  15557. {"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"}
  15558. {"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"}
  15559. {"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"}
  15560. {"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}
  15561. {"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"}
  15562. {"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"}
  15563. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
  15564. {"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"}
  15565. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"}
  15566. {"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"}
  15567. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"}
  15568. {"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"}
  15569. {"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"}
  15570. {"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"}
  15571. {"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"}
  15572. {"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}
  15573. {"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"}
  15574. {"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"}
  15575. {"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"}
  15576. {"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"}
  15577. {"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"}
  15578. {"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"}
  15579. {"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"}
  15580. {"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}
  15581. {"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"}
  15582. {"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"}
  15583. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"}
  15584. {"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"}
  15585. {"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"}
  15586. {"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"}
  15587. {"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"}
  15588. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"}
  15589. {"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"}
  15590. {"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"}
  15591. {"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"}
  15592. {"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}
  15593. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"}
  15594. {"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"}
  15595. {"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"}
  15596. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
  15597. {"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"}
  15598. {"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"}
  15599. {"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"}
  15600. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"}
  15601. {"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"}
  15602. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
  15603. {"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"}
  15604. {"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"}
  15605. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
  15606. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"}
  15607. {"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"}
  15608. {"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"}
  15609. {"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"}
  15610. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
  15611. {"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"}
  15612. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"}
  15613. {"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"}
  15614. {"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"}
  15615. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
  15616. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array"}
  15617. {"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"}
  15618. {"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"}
  15619. {"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"}
  15620. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
  15621. {"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"}
  15622. {"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"}
  15623. {"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}
  15624. {"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"}
  15625. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
  15626. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
  15627. {"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"}
  15628. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
  15629. {"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"}
  15630. {"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"}
  15631. {"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"}
  15632. {"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"}
  15633. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
  15634. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
  15635. {"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"}
  15636. {"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"}
  15637. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
  15638. {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"}
  15639. {"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"}
  15640. {"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"}
  15641. {"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"}
  15642. {"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"}
  15643. {"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}
  15644. {"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"}
  15645. {"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"}
  15646. {"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"}
  15647. {"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"}
  15648. {"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"}
  15649. {"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"}
  15650. {"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"}
  15651. {"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"}
  15652. {"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"}
  15653. {"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"}
  15654. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
  15655. {"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"}
  15656. {"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"}
  15657. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
  15658. {"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"}
  15659. {"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}
  15660. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
  15661. {"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"}
  15662. {"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"}
  15663. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
  15664. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
  15665. {"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"}
  15666. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
  15667. {"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"}
  15668. {"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"}
  15669. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Elapsed":0}
  15670. {"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"}
  15671. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
  15672. {"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"}
  15673. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Elapsed":0}
  15674. {"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"}
  15675. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Elapsed":0}
  15676. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
  15677. {"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"}
  15678. {"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"}
  15679. {"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}
  15680. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
  15681. {"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"}
  15682. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
  15683. {"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"}
  15684. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"}
  15685. {"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"}
  15686. {"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"}
  15687. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Elapsed":0}
  15688. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
  15689. {"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"}
  15690. {"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"}
  15691. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Elapsed":0}
  15692. {"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"}
  15693. {"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"}
  15694. {"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"}
  15695. {"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"}
  15696. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"}
  15697. {"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"}
  15698. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"}
  15699. {"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"}
  15700. {"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"}
  15701. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Elapsed":0}
  15702. {"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"}
  15703. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"}
  15704. {"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"}
  15705. {"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}
  15706. {"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"}
  15707. {"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"}
  15708. {"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"}
  15709. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Elapsed":0}
  15710. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"}
  15711. {"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"}
  15712. {"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"}
  15713. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Elapsed":0}
  15714. {"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"}
  15715. {"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"}
  15716. {"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"}
  15717. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"}
  15718. {"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"}
  15719. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Elapsed":0}
  15720. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"}
  15721. {"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"}
  15722. {"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"}
  15723. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"}
  15724. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"}
  15725. {"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"}
  15726. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"}
  15727. {"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"}
  15728. {"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"}
  15729. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"}
  15730. {"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"}
  15731. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Elapsed":0}
  15732. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"}
  15733. {"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"}
  15734. {"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"}
  15735. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Elapsed":0}
  15736. {"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"}
  15737. {"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"}
  15738. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object"}
  15739. {"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"}
  15740. {"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"}
  15741. {"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}
  15742. {"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"}
  15743. {"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}
  15744. {"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"}
  15745. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"}
  15746. {"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"}
  15747. {"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}
  15748. {"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"}
  15749. {"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"}
  15750. {"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"}
  15751. {"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}
  15752. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"}
  15753. {"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"}
  15754. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"}
  15755. {"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"}
  15756. {"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"}
  15757. {"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}
  15758. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"}
  15759. {"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"}
  15760. {"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"}
  15761. {"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}
  15762. {"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"}
  15763. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"}
  15764. {"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"}
  15765. {"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"}
  15766. {"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"}
  15767. {"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}
  15768. {"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"}
  15769. {"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}
  15770. {"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"}
  15771. {"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}
  15772. {"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"}
  15773. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Elapsed":0}
  15774. {"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"}
  15775. {"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}
  15776. {"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"}
  15777. {"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}
  15778. {"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"}
  15779. {"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}
  15780. {"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"}
  15781. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Elapsed":0}
  15782. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
  15783. {"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"}
  15784. {"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"}
  15785. {"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}
  15786. {"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"}
  15787. {"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}
  15788. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"}
  15789. {"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"}
  15790. {"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"}
  15791. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"}
  15792. {"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"}
  15793. {"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}
  15794. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"}
  15795. {"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"}
  15796. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"}
  15797. {"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"}
  15798. {"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"}
  15799. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Elapsed":0}
  15800. {"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"}
  15801. {"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}
  15802. {"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"}
  15803. {"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}
  15804. {"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"}
  15805. {"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}
  15806. {"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"}
  15807. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Elapsed":0}
  15808. {"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"}
  15809. {"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}
  15810. {"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"}
  15811. {"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}
  15812. {"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"}
  15813. {"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"}
  15814. {"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"}
  15815. {"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}
  15816. {"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"}
  15817. {"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}
  15818. {"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"}
  15819. {"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}
  15820. {"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"}
  15821. {"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}
  15822. {"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"}
  15823. {"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}
  15824. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"}
  15825. {"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"}
  15826. {"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"}
  15827. {"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"}
  15828. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
  15829. {"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"}
  15830. {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
  15831. {"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"}
  15832. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
  15833. {"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"}
  15834. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
  15835. {"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"}
  15836. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
  15837. {"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"}
  15838. {"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"}
  15839. {"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"}
  15840. {"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"}
  15841. {"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"}
  15842. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
  15843. {"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"}
  15844. {"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"}
  15845. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
  15846. {"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"}
  15847. {"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"}
  15848. {"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"}
  15849. {"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"}
  15850. {"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"}
  15851. {"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"}
  15852. {"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"}
  15853. {"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}
  15854. {"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"}
  15855. {"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"}
  15856. {"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"}
  15857. {"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}
  15858. {"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"}
  15859. {"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}
  15860. {"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"}
  15861. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Elapsed":0}
  15862. {"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"}
  15863. {"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"}
  15864. {"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"}
  15865. {"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}
  15866. {"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"}
  15867. {"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}
  15868. {"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"}
  15869. {"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}
  15870. {"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"}
  15871. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Elapsed":0}
  15872. {"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"}
  15873. {"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}
  15874. {"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"}
  15875. {"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"}
  15876. {"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"}
  15877. {"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}
  15878. {"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"}
  15879. {"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}
  15880. {"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"}
  15881. {"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}
  15882. {"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"}
  15883. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Elapsed":0}
  15884. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string"}
  15885. {"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"}
  15886. {"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"}
  15887. {"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}
  15888. {"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"}
  15889. {"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}
  15890. {"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"}
  15891. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Elapsed":0}
  15892. {"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"}
  15893. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Elapsed":0}
  15894. {"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"}
  15895. {"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"}
  15896. {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
  15897. {"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"}
  15898. {"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"}
  15899. {"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}
  15900. {"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"}
  15901. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Elapsed":0}
  15902. {"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"}
  15903. {"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"}
  15904. {"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"}
  15905. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected"}
  15906. {"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"}
  15907. {"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"}
  15908. {"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"}
  15909. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
  15910. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
  15911. {"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"}
  15912. {"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"}
  15913. {"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}
  15914. {"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"}
  15915. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
  15916. {"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"}
  15917. {"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}
  15918. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
  15919. {"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"}
  15920. {"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"}
  15921. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"}
  15922. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
  15923. {"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"}
  15924. {"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"}
  15925. {"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"}
  15926. {"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"}
  15927. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Elapsed":0}
  15928. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"}
  15929. {"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"}
  15930. {"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"}
  15931. {"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}
  15932. {"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"}
  15933. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"}
  15934. {"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"}
  15935. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Elapsed":0}
  15936. {"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"}
  15937. {"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"}
  15938. {"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"}
  15939. {"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"}
  15940. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
  15941. {"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"}
  15942. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"}
  15943. {"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"}
  15944. {"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"}
  15945. {"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}
  15946. {"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"}
  15947. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"}
  15948. {"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"}
  15949. {"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}
  15950. {"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"}
  15951. {"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"}
  15952. {"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"}
  15953. {"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"}
  15954. {"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"}
  15955. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Elapsed":0}
  15956. {"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"}
  15957. {"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}
  15958. {"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"}
  15959. {"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}
  15960. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"}
  15961. {"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"}
  15962. {"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"}
  15963. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"}
  15964. {"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"}
  15965. {"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"}
  15966. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"}
  15967. {"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"}
  15968. {"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"}
  15969. {"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}
  15970. {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"}
  15971. {"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"}
  15972. {"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"}
  15973. {"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}
  15974. {"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"}
  15975. {"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"}
  15976. {"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"}
  15977. {"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"}
  15978. {"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"}
  15979. {"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}
  15980. {"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"}
  15981. {"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}
  15982. {"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"}
  15983. {"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"}
  15984. {"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"}
  15985. {"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"}
  15986. {"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"}
  15987. {"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}
  15988. {"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"}
  15989. {"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"}
  15990. {"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"}
  15991. {"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}
  15992. {"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"}
  15993. {"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"}
  15994. {"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"}
  15995. {"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}
  15996. {"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"}
  15997. {"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}
  15998. {"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"}
  15999. {"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}
  16000. {"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"}
  16001. {"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}
  16002. {"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"}
  16003. {"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"}
  16004. {"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"}
  16005. {"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}
  16006. {"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"}
  16007. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Elapsed":0}
  16008. {"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"}
  16009. {"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"}
  16010. {"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"}
  16011. {"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}
  16012. {"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"}
  16013. {"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}
  16014. {"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"}
  16015. {"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}
  16016. {"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"}
  16017. {"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"}
  16018. {"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"}
  16019. {"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"}
  16020. {"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"}
  16021. {"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"}
  16022. {"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"}
  16023. {"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}
  16024. {"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"}
  16025. {"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}
  16026. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"}
  16027. {"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"}
  16028. {"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"}
  16029. {"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"}
  16030. {"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"}
  16031. {"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}
  16032. {"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"}
  16033. {"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"}
  16034. {"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"}
  16035. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Elapsed":0}
  16036. {"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"}
  16037. {"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}
  16038. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"}
  16039. {"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"}
  16040. {"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"}
  16041. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Elapsed":0}
  16042. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"}
  16043. {"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"}
  16044. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"}
  16045. {"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"}
  16046. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"}
  16047. {"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"}
  16048. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"}
  16049. {"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"}
  16050. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"}
  16051. {"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"}
  16052. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"}
  16053. {"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"}
  16054. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"}
  16055. {"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"}
  16056. {"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"}
  16057. {"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}
  16058. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number"}
  16059. {"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"}
  16060. {"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"}
  16061. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Elapsed":0}
  16062. {"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"}
  16063. {"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}
  16064. {"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"}
  16065. {"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}
  16066. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool"}
  16067. {"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"}
  16068. {"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"}
  16069. {"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}
  16070. {"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"}
  16071. {"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}
  16072. {"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"}
  16073. {"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}
  16074. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null"}
  16075. {"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"}
  16076. {"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"}
  16077. {"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"}
  16078. {"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"}
  16079. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Elapsed":0}
  16080. {"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"}
  16081. {"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"}
  16082. {"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"}
  16083. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Elapsed":0}
  16084. {"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"}
  16085. {"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}
  16086. {"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"}
  16087. {"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}
  16088. {"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"}
  16089. {"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}
  16090. {"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"}
  16091. {"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}
  16092. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"}
  16093. {"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"}
  16094. {"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"}
  16095. {"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"}
  16096. {"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"}
  16097. {"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"}
  16098. {"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"}
  16099. {"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"}
  16100. {"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"}
  16101. {"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}
  16102. {"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"}
  16103. {"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}
  16104. {"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"}
  16105. {"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}
  16106. {"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"}
  16107. {"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}
  16108. {"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"}
  16109. {"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}
  16110. {"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"}
  16111. {"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}
  16112. {"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"}
  16113. {"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}
  16114. {"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"}
  16115. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Elapsed":0}
  16116. {"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"}
  16117. {"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"}
  16118. {"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"}
  16119. {"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"}
  16120. {"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"}
  16121. {"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"}
  16122. {"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"}
  16123. {"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"}
  16124. {"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"}
  16125. {"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}
  16126. {"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"}
  16127. {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Elapsed":0}
  16128. {"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"}
  16129. {"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"}
  16130. {"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"}
  16131. {"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}
  16132. {"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"}
  16133. {"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"}
  16134. {"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"}
  16135. {"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}
  16136. {"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"}
  16137. {"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"}
  16138. {"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"}
  16139. {"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}
  16140. {"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"}
  16141. {"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"}
  16142. {"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"}
  16143. {"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}
  16144. {"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"}
  16145. {"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"}
  16146. {"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"}
  16147. {"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}
  16148. {"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"}
  16149. {"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"}
  16150. {"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"}
  16151. {"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}
  16152. {"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"}
  16153. {"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"}
  16154. {"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"}
  16155. {"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}
  16156. {"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"}
  16157. {"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"}
  16158. {"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"}
  16159. {"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"}
  16160. {"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"}
  16161. {"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"}
  16162. {"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}
  16163. {"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"}
  16164. {"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}
  16165. {"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"}
  16166. {"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}
  16167. {"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"}
  16168. {"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}
  16169. {"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"}
  16170. {"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}
  16171. {"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"}
  16172. {"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}
  16173. {"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"}
  16174. {"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"}
  16175. {"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}
  16176. {"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"}
  16177. {"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}
  16178. {"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"}
  16179. {"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"}
  16180. {"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"}
  16181. {"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"}
  16182. {"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"}
  16183. {"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"}
  16184. {"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"}
  16185. {"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"}
  16186. {"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}
  16187. {"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"}
  16188. {"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"}
  16189. {"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"}
  16190. {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Elapsed":0}
  16191. {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
  16192. {"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"}
  16193. {"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"}
  16194. {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
  16195. {"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"}
  16196. {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
  16197. {"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"}
  16198. {"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"}
  16199. {"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"}
  16200. {"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"}
  16201. {"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"}
  16202. {"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"}
  16203. {"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"}
  16204. {"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}
  16205. {"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"}
  16206. {"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"}
  16207. {"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"}
  16208. {"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"}
  16209. {"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"}
  16210. {"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"}
  16211. {"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}
  16212. {"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"}
  16213. {"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"}
  16214. {"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"}
  16215. {"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"}
  16216. {"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}
  16217. {"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"}
  16218. {"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}
  16219. {"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"}
  16220. {"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}
  16221. {"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"}
  16222. {"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"}
  16223. {"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"}
  16224. {"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}
  16225. {"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"}
  16226. {"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}
  16227. {"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"}
  16228. {"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}
  16229. {"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"}
  16230. {"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"}
  16231. {"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}
  16232. {"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"}
  16233. {"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}
  16234. {"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"}
  16235. {"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"}
  16236. {"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}
  16237. {"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"}
  16238. {"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}
  16239. {"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"}
  16240. {"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"}
  16241. {"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"}
  16242. {"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"}
  16243. {"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"}
  16244. {"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}
  16245. {"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"}
  16246. {"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}
  16247. {"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"}
  16248. {"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"}
  16249. {"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"}
  16250. {"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"}
  16251. {"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"}
  16252. {"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"}
  16253. {"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}
  16254. {"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"}
  16255. {"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}
  16256. {"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"}
  16257. {"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"}
  16258. {"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"}
  16259. {"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"}
  16260. {"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"}
  16261. {"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}
  16262. {"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"}
  16263. {"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"}
  16264. {"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"}
  16265. {"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"}
  16266. {"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"}
  16267. {"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}
  16268. {"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"}
  16269. {"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}
  16270. {"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"}
  16271. {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Elapsed":0}
  16272. {"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"}
  16273. {"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}
  16274. {"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"}
  16275. {"Time":"2026-09-12T11:39:33.1063374+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Elapsed":0}
  16276. {"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"}
  16277. {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Elapsed":0.01}
  16278. {"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"}
  16279. {"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}
  16280. {"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"}
  16281. {"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}
  16282. {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"FAIL\n","OutputType":"frame"}
  16283. {"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"}
  16284. {"Time":"2026-09-12T11:39:33.3180238+08:00","Action":"fail","Package":"github.com/Wei-Shaw/sub2api/internal/service","Elapsed":66.376}