| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707 |
- {"Time":"2026-09-12T11:42:32.8768353+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/service"}
- {"Time":"2026-09-12T11:42:34.8035575+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/repository"}
- {"Time":"2026-09-12T11:42:34.8035575+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"}
- {"Time":"2026-09-12T11:42:34.8045548+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin"}
- {"Time":"2026-09-12T11:42:34.9889356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"2026/09/12 03:42:34 Timezone initialized: UTC (UTC offset: +00:00)\n"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"=== RUN TestPreviewAntiDegradeOpenAI\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"--- PASS: TestPreviewAntiDegradeOpenAI (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"=== RUN TestPreviewAntiDegradeAnthropic\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"--- PASS: TestPreviewAntiDegradeAnthropic (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"=== RUN TestPreviewAntiDegradeNothingToDo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"--- PASS: TestPreviewAntiDegradeNothingToDo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"=== RUN TestPreviewAntiDegradeAlreadyEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"--- PASS: TestPreviewAntiDegradeAlreadyEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"=== RUN TestApplyRevertAntiDegrade\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"--- PASS: TestApplyRevertAntiDegrade (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"=== RUN TestRevertAntiDegradeRejectsBadSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"--- PASS: TestRevertAntiDegradeRejectsBadSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Output":"=== RUN TestBulkUpdateAccountsDoesNotPrewriteCodexSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Output":"--- PASS: TestBulkUpdateAccountsDoesNotPrewriteCodexSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"=== RUN TestDuplicateAccountDoesNotCopyCodexFingerprintSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"--- PASS: TestDuplicateAccountDoesNotCopyCodexFingerprintSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Output":"=== RUN TestAccountServiceCreateAndUpdateCodexSeedLifecycle\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Output":"--- PASS: TestAccountServiceCreateAndUpdateCodexSeedLifecycle (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads"}
- {"Time":"2026-09-12T11:42:34.9894557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"=== RUN TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"--- PASS: TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"=== RUN TestMode1RuntimeRejectsConfigurationDrift\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"--- PASS: TestMode1RuntimeRejectsConfigurationDrift (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"=== RUN TestMode1InvalidMarkerDoesNotDowngrade\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"--- PASS: TestMode1InvalidMarkerDoesNotDowngrade (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"=== RUN TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"--- PASS: TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy"}
- {"Time":"2026-09-12T11:42:34.9910162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"=== RUN TestMode1PartialAndBulkUpdatesCannotDisablePolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"--- PASS: TestMode1PartialAndBulkUpdatesCannotDisablePolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"=== RUN TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"--- PASS: TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Output":"=== RUN TestMode1UsesExistingPluginRouting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Output":"--- PASS: TestMode1UsesExistingPluginRouting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9915239+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9920371+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget"}
- {"Time":"2026-09-12T11:42:34.9920371+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"=== RUN TestMode1IntegrityPreservesReasoningToolsAndBudget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9925444+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"--- PASS: TestMode1IntegrityPreservesReasoningToolsAndBudget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9925444+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9925444+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough"}
- {"Time":"2026-09-12T11:42:34.9925444+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9925444+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false"}
- {"Time":"2026-09-12T11:42:34.9925444+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"2026/09/12 03:42:34 [OpenAI 自动透传] 命中自动透传分支: account=1 name=mode1 type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Output":"=== RUN TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Output":"--- PASS: TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Output":"=== RUN TestMode1InvalidVersionCanBeExplicitlyRestored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Output":"--- PASS: TestMode1InvalidVersionCanBeExplicitlyRestored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Output":"=== RUN TestMode1V3StandardTransportWithTLSGloballyDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Output":"--- PASS: TestMode1V3StandardTransportWithTLSGloballyDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0"}
- {"Time":"2026-09-12T11:42:34.994086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9957187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9957187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9957187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1"}
- {"Time":"2026-09-12T11:42:34.9957187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9967369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9967369+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9967369+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2"}
- {"Time":"2026-09-12T11:42:34.9967369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9967369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"2026/09/12 03:42:34 [OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: , type: oauth, isCodexCLI: false)\n"}
- {"Time":"2026-09-12T11:42:34.9967369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"2026/09/12 03:42:34 [OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: )\n"}
- {"Time":"2026-09-12T11:42:34.9982621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.9982621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.9982621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3"}
- {"Time":"2026-09-12T11:42:34.9982621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.999788+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:34.999788+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:42:34.999788+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4"}
- {"Time":"2026-09-12T11:42:34.999788+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0008193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0008193+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0008193+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.4-high stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0013242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0"}
- {"Time":"2026-09-12T11:42:35.0018389+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.002847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0033651+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0033651+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1"}
- {"Time":"2026-09-12T11:42:35.0033651+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0101585+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.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0101585+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:35.0101585+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2"}
- {"Time":"2026-09-12T11:42:35.0101585+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0106617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"2026/09/12 03:42:35 [OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: , type: oauth, isCodexCLI: false)\n"}
- {"Time":"2026-09-12T11:42:35.0106617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"2026/09/12 03:42:35 [OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: )\n"}
- {"Time":"2026-09-12T11:42:35.0111884+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0111884+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0111884+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3"}
- {"Time":"2026-09-12T11:42:35.0111884+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0127519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0127519+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0127519+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4"}
- {"Time":"2026-09-12T11:42:35.0127519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0137878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.4-high stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"2026/09/12 03:42:35 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3 (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Elapsed":0.02}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0143005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== RUN TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== PAUSE TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== RUN TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== PAUSE TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== RUN TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== PAUSE TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== RUN TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== PAUSE TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== RUN TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== PAUSE TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== PAUSE TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Output":"=== RUN TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Output":"--- PASS: TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0148054+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0153122+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage"}
- {"Time":"2026-09-12T11:42:35.0153122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Output":"=== RUN TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0153122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Output":"--- PASS: TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0153122+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0153122+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload"}
- {"Time":"2026-09-12T11:42:35.0153122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"=== RUN TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0168394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:42:35 INFO content_moderation.config_loaded user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses provider=openai protocol=openai_responses model=gpt-5.5 enabled=true mode=pre_block all_groups=true configured_group_ids=[] in_group_scope=true model_filter_type=all configured_models=[] in_model_scope=true sample_rate=100 api_key_count=1 pre_hash_check_enabled=false record_non_hits=true\n"}
- {"Time":"2026-09-12T11:42:35.0168394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:42:35 INFO content_moderation.input_extracted user_id=1001 api_key_id=0 group_id=0 endpoint=/responses protocol=openai_responses text_runes=16 image_count=0\n"}
- {"Time":"2026-09-12T11:42:35.0183399+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:42:35 INFO content_moderation.audit_result user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses protocol=openai_responses mode=pre_block allow_block=true flagged=false blocked=false action=allow highest_category=sexual highest_score=0.01 latency_ms=1 queue_delay_ms=\u003cnil\u003e\n"}
- {"Time":"2026-09-12T11:42:35.0293927+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"--- PASS: TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0293927+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:35.0293927+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput"}
- {"Time":"2026-09-12T11:42:35.0293927+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"=== RUN TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0298935+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:42:35 INFO content_moderation.config_loaded user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses provider=openai protocol=openai_responses model=gpt-5.5 enabled=true mode=pre_block all_groups=true configured_group_ids=[] in_group_scope=true model_filter_type=all configured_models=[] in_model_scope=true sample_rate=100 api_key_count=1 pre_hash_check_enabled=false record_non_hits=false\n"}
- {"Time":"2026-09-12T11:42:35.0298935+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:42:35 INFO content_moderation.input_extracted user_id=1001 api_key_id=0 group_id=0 endpoint=/responses protocol=openai_responses text_runes=21 image_count=0\n"}
- {"Time":"2026-09-12T11:42:35.0305146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:42:35 INFO content_moderation.audit_result user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses protocol=openai_responses mode=pre_block allow_block=true flagged=true blocked=true action=block highest_category=sexual highest_score=0.9 latency_ms=0 queue_delay_ms=\u003cnil\u003e\n"}
- {"Time":"2026-09-12T11:42:35.0409598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"--- PASS: TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0409598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:42:35.0416223+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.042133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0426579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature"}
- {"Time":"2026-09-12T11:42:35.0426579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Output":"=== RUN TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0432358+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Output":"--- PASS: TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0432358+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0432358+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse"}
- {"Time":"2026-09-12T11:42:35.0432358+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Output":"=== RUN TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Output":"--- PASS: TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"2026/09/12 03:42:35 probe_done: account_id=96 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Output":"=== RUN TestCodexOutboundVersionHasSingleSource\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Output":"--- PASS: TestCodexOutboundVersionHasSingleSource (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Output":"=== RUN TestDetectCodexClientRestriction_NilSettingServiceFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Output":"--- PASS: TestDetectCodexClientRestriction_NilSettingServiceFailsClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Output":"=== RUN TestCodexClientRestrictionMessage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Output":"=== RUN TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Output":"--- PASS: TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Output":"=== RUN TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Output":"--- PASS: TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Output":"=== RUN TestCodexClientRestrictionMessage/无法识别版本:保持原通用句\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Output":"--- PASS: TestCodexClientRestrictionMessage/无法识别版本:保持原通用句 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Output":"=== RUN TestCodexClientRestrictionMessage/未命中官方:保持原通用句\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Output":"--- PASS: TestCodexClientRestrictionMessage/未命中官方:保持原通用句 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Output":"--- PASS: TestCodexClientRestrictionMessage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0438242+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Output":"=== RUN TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Output":"--- PASS: TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Output":"=== RUN TestCodexAccountIdentityNamespaceUsesStableCredentialSource\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Output":"--- PASS: TestCodexAccountIdentityNamespaceUsesStableCredentialSource (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"=== RUN TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"--- PASS: TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"=== RUN TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"--- PASS: TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"=== RUN TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"--- PASS: TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== RUN TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"=== RUN TestGetCodexFingerprintMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"=== RUN TestGetCodexFingerprintMode/nil_账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"--- PASS: TestGetCodexFingerprintMode/nil_账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"=== RUN TestGetCodexFingerprintMode/非_OAuth_账号\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"--- PASS: TestGetCodexFingerprintMode/非_OAuth_账号 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/OpenAI_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/OpenAI_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/Anthropic_setup_token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/Anthropic_setup_token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"=== RUN TestGetCodexFingerprintMode/无_extra_默认_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/无_extra_默认_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/空值默认_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/空值默认_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/非法值默认_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/非法值默认_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"=== RUN TestGetCodexFingerprintMode/显式_off\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"--- PASS: TestGetCodexFingerprintMode/显式_off (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"=== RUN TestGetCodexFingerprintMode/device\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"--- PASS: TestGetCodexFingerprintMode/device (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"=== RUN TestGetCodexFingerprintMode/session\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"--- PASS: TestGetCodexFingerprintMode/session (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"=== RUN TestGetCodexFingerprintMode/full\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"--- PASS: TestGetCodexFingerprintMode/full (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"--- PASS: TestGetCodexFingerprintMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_OffMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_OffMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_DeviceMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_DeviceMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_FullMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_FullMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.044362+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_OffMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_OffMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_DeviceMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_DeviceMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_SessionMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_SessionMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_FullMode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_FullMode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value"}
- {"Time":"2026-09-12T11:42:35.0449466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_Noop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_Noop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"=== RUN TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"--- PASS: TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Output":"=== RUN TestEnsureCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Output":"=== RUN TestEnsureCodexIdentityHeaders/补齐缺失身份头\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Output":"--- PASS: TestEnsureCodexIdentityHeaders/补齐缺失身份头 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Output":"=== RUN TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Output":"--- PASS: TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Output":"--- PASS: TestEnsureCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Output":"=== RUN TestEnforceCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/TUI_身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/TUI_身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Output":"=== RUN TestEnforceCodexIdentityHeaders/错配_originator\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Output":"--- PASS: TestEnforceCodexIdentityHeaders/错配_originator (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/官方_vscode_身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/官方_vscode_身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/第三方客户端身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/第三方客户端身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Output":"=== RUN TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Output":"--- PASS: TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Output":"=== RUN TestEnforceCodexIdentityHeaders/UA_缺失\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Output":"--- PASS: TestEnforceCodexIdentityHeaders/UA_缺失 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Output":"=== RUN TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Output":"--- PASS: TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Output":"=== RUN TestEnforceCodexIdentityHeaders/陈旧客户端版本\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Output":"--- PASS: TestEnforceCodexIdentityHeaders/陈旧客户端版本 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Output":"--- PASS: TestEnforceCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Output":"=== RUN TestEnforceCodexIdentityHeadersFollowsCanonicalResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Output":"--- PASS: TestEnforceCodexIdentityHeadersFollowsCanonicalResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Output":"=== RUN TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Output":"--- PASS: TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Output":"=== RUN TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Output":"--- PASS: TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Output":"=== RUN TestEnforceCodexIdentityHeaders_EnforcementDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Output":"--- PASS: TestEnforceCodexIdentityHeaders_EnforcementDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Output":"=== RUN TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Output":"--- PASS: TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Output":"=== RUN TestEnforceCodexIdentityHeadersIsIdempotent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Output":"--- PASS: TestEnforceCodexIdentityHeadersIsIdempotent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0454648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Output":"=== RUN TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Output":"--- PASS: TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Output":"=== RUN TestNormalizeCodexClientVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Output":"--- PASS: TestNormalizeCodexClientVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Output":"=== RUN TestBuildCodexCLIUserAgent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Output":"--- PASS: TestBuildCodexCLIUserAgent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Output":"=== RUN TestCodexCanonicalUserAgentFollowsResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Output":"--- PASS: TestCodexCanonicalUserAgentFollowsResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Output":"=== RUN TestCodexCanonicalUserAgentFallsBackWithoutResolver\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Output":"--- PASS: TestCodexCanonicalUserAgentFallsBackWithoutResolver (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability"}
- {"Time":"2026-09-12T11:42:35.0459852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0464944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0464944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0464944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge"}
- {"Time":"2026-09-12T11:42:35.0464944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0464944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0464944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0470025+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0470025+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0470025+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse"}
- {"Time":"2026-09-12T11:42:35.0470025+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Output":"=== RUN TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Output":"--- PASS: TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== RUN TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== PAUSE TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== RUN TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== RUN TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== RUN TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== RUN TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias"}
- {"Time":"2026-09-12T11:42:35.0480183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Output":"=== RUN TestAstraCodexToolCapabilitiesFollowAPIKeyAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0485386+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Output":"--- PASS: TestAstraCodexToolCapabilitiesFollowAPIKeyAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0485386+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0485386+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard"}
- {"Time":"2026-09-12T11:42:35.0485386+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Output":"=== RUN TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Output":"--- PASS: TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak"}
- {"Time":"2026-09-12T11:42:35.0490448+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== RUN TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== PAUSE TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== RUN TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== PAUSE TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Output":"=== RUN TestBuildCodexModelsManifestUsesGPT6AstraInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Output":"--- PASS: TestBuildCodexModelsManifestUsesGPT6AstraInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== RUN TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== PAUSE TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== RUN TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== PAUSE TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== RUN TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== PAUSE TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== RUN TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== PAUSE TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== RUN TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== PAUSE TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== RUN TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== PAUSE TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== RUN TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== RUN TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== RUN TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== RUN TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== RUN TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== RUN TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== RUN TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
- {"Time":"2026-09-12T11:42:35.0495514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/configuration_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/configuration_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/canceled_request\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/canceled_request (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/closed_connection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/closed_connection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/network_operation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/network_operation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/DNS_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/DNS_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough"}
- {"Time":"2026-09-12T11:42:35.0500587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Output":"=== RUN TestFetchCodexModelsManifestPassthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0505662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Output":"--- PASS: TestFetchCodexModelsManifestPassthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0505662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0505662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken"}
- {"Time":"2026-09-12T11:42:35.0505662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0510698+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0510698+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0510698+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce"}
- {"Time":"2026-09-12T11:42:35.0510698+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0520836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0520836+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0520836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors"}
- {"Time":"2026-09-12T11:42:35.0520836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.052591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.052591+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.052591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion"}
- {"Time":"2026-09-12T11:42:35.052591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Output":"=== RUN TestFetchCodexModelsManifestDefaultClientVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Output":"--- PASS: TestFetchCodexModelsManifestDefaultClientVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified"}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Output":"=== RUN TestFetchCodexModelsManifestNotModified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Output":"--- PASS: TestFetchCodexModelsManifestNotModified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError"}
- {"Time":"2026-09-12T11:42:35.0530989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Output":"=== RUN TestFetchCodexModelsManifestUpstreamError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Output":"--- PASS: TestFetchCodexModelsManifestUpstreamError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken"}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Output":"=== RUN TestFetchCodexModelsManifestMissingToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Output":"--- PASS: TestFetchCodexModelsManifestMissingToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream"}
- {"Time":"2026-09-12T11:42:35.0536066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCustomUpstream\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0541136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCustomUpstream (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0541136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0541136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag"}
- {"Time":"2026-09-12T11:42:35.0541136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0556484+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0556484+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0556484+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList"}
- {"Time":"2026-09-12T11:42:35.0556484+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels"}
- {"Time":"2026-09-12T11:42:35.0567285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Output":"=== RUN TestFetchCodexModelsManifestOAuthPreservesResponsesLite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Output":"--- PASS: TestFetchCodexModelsManifestOAuthPreservesResponsesLite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== RUN TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== PAUSE TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged"}
- {"Time":"2026-09-12T11:42:35.0572493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Output":"=== RUN TestFetchCodexModelsManifestUsesConfiguredBodyLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Output":"--- PASS: TestFetchCodexModelsManifestUsesConfiguredBodyLimit (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary"}
- {"Time":"2026-09-12T11:42:35.0577564+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Output":"=== RUN TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Output":"--- PASS: TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary (0.03s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Elapsed":0.03}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation"}
- {"Time":"2026-09-12T11:42:35.0926135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Output":"=== RUN TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.14315+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.14315+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Elapsed":0.05}
- {"Time":"2026-09-12T11:42:35.14315+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh"}
- {"Time":"2026-09-12T11:42:35.14315+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh (0.05s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Elapsed":0.05}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally"}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation"}
- {"Time":"2026-09-12T11:42:35.1942323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1969646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1969646+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.1969646+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity"}
- {"Time":"2026-09-12T11:42:35.1969646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1975321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.1975321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.1975321+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize"}
- {"Time":"2026-09-12T11:42:35.1975321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2192525+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2192525+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Elapsed":0.02}
- {"Time":"2026-09-12T11:42:35.2192525+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing"}
- {"Time":"2026-09-12T11:42:35.2192525+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable"}
- {"Time":"2026-09-12T11:42:35.2300502+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Output":"=== RUN TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2313122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Output":"--- PASS: TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2313122+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2313122+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount"}
- {"Time":"2026-09-12T11:42:35.2313122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"=== RUN TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2318319+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"2026/09/12 03:42:35 WARN account_disabled_auth_error account_id=1 error=\"Token revoked (401): token has been revoked\"\n"}
- {"Time":"2026-09-12T11:42:35.2318319+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"--- PASS: TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2318319+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2318319+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount"}
- {"Time":"2026-09-12T11:42:35.2318319+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Output":"=== RUN TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Output":"--- PASS: TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUpstreamError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUpstreamError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL"}
- {"Time":"2026-09-12T11:42:35.2323393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2334018+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2334018+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2334018+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host"}
- {"Time":"2026-09-12T11:42:35.2334018+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2339133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2339133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2339133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL"}
- {"Time":"2026-09-12T11:42:35.2339133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2344233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2344233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2344233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2344233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2344233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests"}
- {"Time":"2026-09-12T11:42:35.2344233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Output":"=== RUN TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2349357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Output":"--- PASS: TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2349357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2349357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground"}
- {"Time":"2026-09-12T11:42:35.2349357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Output":"=== RUN TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2359532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Output":"--- PASS: TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2359532+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2359532+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure"}
- {"Time":"2026-09-12T11:42:35.2359532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2359532+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches"}
- {"Time":"2026-09-12T11:42:35.2359532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss"}
- {"Time":"2026-09-12T11:42:35.2364803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Output":"=== RUN TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2369903+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Output":"--- PASS: TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2369903+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2369903+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering"}
- {"Time":"2026-09-12T11:42:35.2369903+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Output":"=== RUN TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2374991+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Output":"--- PASS: TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2374991+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2374991+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken"}
- {"Time":"2026-09-12T11:42:35.2374991+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Output":"=== RUN TestOpenAIOAuthService_ValidateCodexPersonalAccessToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Output":"--- PASS: TestOpenAIOAuthService_ValidateCodexPersonalAccessToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Output":"=== RUN TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Output":"--- PASS: TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Output":"=== RUN TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Output":"=== RUN TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Output":"--- PASS: TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Output":"=== RUN TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Output":"=== RUN TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Output":"--- PASS: TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType"}
- {"Time":"2026-09-12T11:42:35.2380085+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Output":"=== RUN TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Output":"--- PASS: TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Output":"=== RUN TestEnsureCodexReasoningInclude\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Output":"--- PASS: TestEnsureCodexReasoningInclude (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Output":"=== RUN TestApplyCodexClientMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Output":"--- PASS: TestApplyCodexClientMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Output":"=== RUN TestDefaultCodexSynthInstructionsModelAware\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Output":"--- PASS: TestDefaultCodexSynthInstructionsModelAware (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationPreservesInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationPreservesInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Output":"=== RUN TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Output":"=== RUN TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Output":"=== RUN TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Output":"=== RUN TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Output":"=== RUN TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Output":"=== RUN TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Output":"--- PASS: TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Output":"=== RUN TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Output":"--- PASS: TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required"}
- {"Time":"2026-09-12T11:42:35.2385184+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Output":"=== RUN TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Output":"--- PASS: TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Output":"=== RUN TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Output":"--- PASS: TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesKnownToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesKnownToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Output":"=== RUN TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Output":"--- PASS: TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesFunctionCallInputName\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesFunctionCallInputName (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Output":"=== RUN TestCodexInputItemRequiresNameTypesAllowCallID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Output":"--- PASS: TestCodexInputItemRequiresNameTypesAllowCallID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Output":"=== RUN TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Output":"--- PASS: TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Output":"=== RUN TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Output":"--- PASS: TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Output":"=== RUN TestApplyCodexOAuthTransform_CompactForcesNonStreaming\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Output":"--- PASS: TestApplyCodexOAuthTransform_CompactForcesNonStreaming (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Output":"=== RUN TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Output":"--- PASS: TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Output":"=== RUN TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Output":"--- PASS: TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2390243+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Output":"=== RUN TestValidateCodexSparkInputRejectsInputImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Output":"--- PASS: TestValidateCodexSparkInputRejectsInputImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Output":"=== RUN TestValidateCodexSparkInputRejectsChatImageURL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Output":"--- PASS: TestValidateCodexSparkInputRejectsChatImageURL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Output":"=== RUN TestValidateCodexSparkInputAllowsTextOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Output":"--- PASS: TestValidateCodexSparkInputAllowsTextOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Output":"=== RUN TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Output":"=== RUN TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Output":"=== RUN TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Output":"=== RUN TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Output":"=== RUN TestApplyCodexOAuthTransform_EmptyInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Output":"--- PASS: TestApplyCodexOAuthTransform_EmptyInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Output":"=== RUN TestNormalizeCodexModel_Gpt53\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Output":"--- PASS: TestNormalizeCodexModel_Gpt53 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Output":"=== RUN TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Output":"--- PASS: TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesBareSparkModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesBareSparkModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Output":"=== RUN TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Output":"--- PASS: TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Output":"=== RUN TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Output":"--- PASS: TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Output":"=== RUN TestApplyCodexOAuthTransform_StringInputConvertedToArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Output":"--- PASS: TestApplyCodexOAuthTransform_StringInputConvertedToArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Output":"=== RUN TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Output":"--- PASS: TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Output":"=== RUN TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Output":"--- PASS: TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Output":"=== RUN TestApplyCodexOAuthTransform_StringInputWithToolsField\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Output":"--- PASS: TestApplyCodexOAuthTransform_StringInputWithToolsField (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Output":"=== RUN TestApplyCodexOAuthTransform_StripsPromptCacheRetention\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsPromptCacheRetention (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Output":"=== RUN TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesPromptAndCommands\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2395356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesPromptAndCommands (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Output":"=== RUN TestApplyCodexOAuthTransform_ExtractsSystemMessages\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Output":"--- PASS: TestApplyCodexOAuthTransform_ExtractsSystemMessages (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Output":"=== RUN TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Output":"--- PASS: TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Output":"=== RUN TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Output":"--- PASS: TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Output":"=== RUN TestFilterCodexInput_ReasoningBackfillsMissingSummary\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Output":"--- PASS: TestFilterCodexInput_ReasoningBackfillsMissingSummary (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Output":"=== RUN TestFilterCodexInput_PreservesReasoningSummaryAndContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningSummaryAndContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Output":"=== RUN TestOpenAICodexTurnStateSeed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Output":"--- PASS: TestOpenAICodexTurnStateSeed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Output":"=== RUN TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Output":"--- PASS: TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Output":"=== RUN TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Output":"--- PASS: TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Output":"=== RUN TestStageOpenAICodexTurnState_StagedHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Output":"--- PASS: TestStageOpenAICodexTurnState_StagedHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Output":"=== RUN TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Output":"--- PASS: TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_echo_noop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_echo_noop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Output":"=== RUN TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Output":"--- PASS: TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Output":"=== RUN TestApplyOpenAICodexBetaFeatures\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Output":"=== RUN TestLatestCodexStableReleaseVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Output":"--- PASS: TestLatestCodexStableReleaseVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"=== RUN TestOpenAICodexVersionSyncWritesLatestStableVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"--- PASS: TestOpenAICodexVersionSyncWritesLatestStableVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards"}
- {"Time":"2026-09-12T11:42:35.2400472+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Output":"=== RUN TestOpenAICodexVersionSyncNeverMovesBackwards\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Output":"--- PASS: TestOpenAICodexVersionSyncNeverMovesBackwards (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Output":"=== RUN TestOpenAICodexVersionSyncSkippedWhenDisabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Output":"--- PASS: TestOpenAICodexVersionSyncSkippedWhenDisabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"=== RUN TestOpenAICodexVersionSyncEnabledByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"--- PASS: TestOpenAICodexVersionSyncEnabledByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"=== RUN TestOpenAICodexVersionSyncKeepsValueOnFetchError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"2026/09/12 03:42:35 WARN openai_codex_version_sync_latest_fetch_failed error=\"network down\"\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"2026/09/12 03:42:35 WARN openai_codex_version_sync_fetch_failed error=\"network down\"\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"--- PASS: TestOpenAICodexVersionSyncKeepsValueOnFetchError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"=== RUN TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"--- PASS: TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"2026/09/12 03:42:35 WARN openai_codex_version_sync_latest_fetch_failed error=\"network down\"\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"=== RUN TestOpenAICodexVersionSyncLatestSharesFiltering\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"--- PASS: TestOpenAICodexVersionSyncLatestSharesFiltering (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Output":"=== RUN TestOpenAICodexVersionSyncStartRequiresDependencies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Output":"--- PASS: TestOpenAICodexVersionSyncStartRequiresDependencies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Output":"=== RUN TestGetOpenAICodexClientVersionPriority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/面板覆写优先\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/面板覆写优先 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"=== RUN TestGetOpenAICodexClientVersionFallsBackOnError\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"2026/09/12 03:42:35 WARN failed to get openai codex client version setting error=\"db down\"\n"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"--- PASS: TestGetOpenAICodexClientVersionFallsBackOnError (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Output":"=== RUN TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Output":"--- PASS: TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2405599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=0.146.0 version=0.147.0\n"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"2026/09/12 03:42:35 INFO openai_codex_version_synced previous=\"\" version=0.146.0\n"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Output":"=== RUN TestCodexVersionComparisonIsNumericNotLexical\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Output":"--- PASS: TestCodexVersionComparisonIsNumericNotLexical (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== RUN TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== PAUSE TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== RUN TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== PAUSE TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== RUN TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== PAUSE TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份"}
- {"Time":"2026-09-12T11:42:35.2410675+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份"}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA"}
- {"Time":"2026-09-12T11:42:35.2415754+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== RUN TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== PAUSE TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== RUN TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== PAUSE TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2420844+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"2026/09/12 03:42:35 [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\n"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"2026/09/12 03:42:35 [Billing] Using fallback pricing for model: gpt-5.6-sol\n"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"2026/09/12 03:42:35 [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\n"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"2026/09/12 03:42:35 [Billing] Using fallback pricing for model: gpt-5.6-sol\n"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis"}
- {"Time":"2026-09-12T11:42:35.2425949+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Output":"=== RUN TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Output":"--- PASS: TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"=== RUN TestLogCodexCLIOnlyDetection_NilSafety\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"--- PASS: TestLogCodexCLIOnlyDetection_NilSafety (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"=== RUN TestLogCodexCLIOnlyDetection_OnlyLogsRejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\",\"api_key_id\":2002}\n"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"api_key_id\":2002}\n"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"--- PASS: TestLogCodexCLIOnlyDetection_OnlyLogsRejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"=== RUN TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"api_key_id\":2002,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"203.0.113.42\",\"request_remote_addr\":\"172.18.0.1:54321\",\"request_user_agent\":\"codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.2\",\"request_prompt_cache_key_sha256\":\"a39ee25f645d9e4e\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown\",\"x-real-ip\":\"203.0.113.42\"},\"request_body_size\":133}\n"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"--- PASS: TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Output":"=== RUN TestCodexSnapshotBaseTime\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Output":"=== RUN TestCodexSnapshotBaseTime/valid_updatedAt_wins\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Output":"--- PASS: TestCodexSnapshotBaseTime/valid_updatedAt_wins (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Output":"--- PASS: TestCodexSnapshotBaseTime (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Output":"=== RUN TestCodexResetAtRFC3339\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Output":"=== RUN TestCodexResetAtRFC3339/nil_reset_returns_nil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Output":"--- PASS: TestCodexResetAtRFC3339/nil_reset_returns_nil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Output":"=== RUN TestCodexResetAtRFC3339/positive_seconds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Output":"--- PASS: TestCodexResetAtRFC3339/positive_seconds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Output":"=== RUN TestCodexResetAtRFC3339/negative_seconds_clamp_to_base\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Output":"--- PASS: TestCodexResetAtRFC3339/negative_seconds_clamp_to_base (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Output":"--- PASS: TestCodexResetAtRFC3339 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Output":"=== RUN TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Output":"=== RUN TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Output":"=== RUN TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Output":"=== RUN TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot"}
- {"Time":"2026-09-12T11:42:35.2431043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Output":"=== RUN TestBuildCodexUsageExtraUpdates_NilSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_NilSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Output":"=== RUN TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Output":"=== RUN TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Output":"--- PASS: TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"=== RUN TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5 mapped_model=gpt-5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.243Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"--- PASS: TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Output":"=== RUN TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Output":"--- PASS: TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders"}
- {"Time":"2026-09-12T11:42:35.2436516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Output":"=== RUN TestOpenAIUpdateCodexUsageSnapshotFromHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Output":"--- PASS: TestOpenAIUpdateCodexUsageSnapshotFromHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"=== RUN TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"--- PASS: TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Output":"=== RUN TestExtractCodexFinalResponse_SampleReplay\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Output":"--- PASS: TestExtractCodexFinalResponse_SampleReplay (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+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:42:35.244Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+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:42:35.244Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled"}
- {"Time":"2026-09-12T11:42:35.2441602+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+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:42:35.244Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+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:42:35.244Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+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:42:35.244Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+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:42:35.244Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+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:42:35.244Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+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:42:35.244Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"=== RUN TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"--- PASS: TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.5 mapped_model=gpt-5.5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2446688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.244Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.245Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2451772+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Output":"=== RUN TestMode1CodexSemanticEquivalence\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Output":"=== RUN TestMode1CodexSemanticEquivalence/string_input\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Output":"--- PASS: TestMode1CodexSemanticEquivalence/string_input (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Output":"=== RUN TestMode1CodexSemanticEquivalence/text_parts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Output":"--- PASS: TestMode1CodexSemanticEquivalence/text_parts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Output":"=== RUN TestMode1CodexSemanticEquivalence/reasoning_replay_metadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Output":"--- PASS: TestMode1CodexSemanticEquivalence/reasoning_replay_metadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Output":"=== RUN TestMode1CodexSemanticEquivalence/system_promotion\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Output":"--- PASS: TestMode1CodexSemanticEquivalence/system_promotion (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Output":"=== RUN TestMode1CodexSemanticEquivalence/tool_schema\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Output":"--- PASS: TestMode1CodexSemanticEquivalence/tool_schema (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Output":"=== RUN TestMode1CodexSemanticEquivalence/tool_role_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Output":"--- PASS: TestMode1CodexSemanticEquivalence/tool_role_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Output":"=== RUN TestMode1CodexSemanticEquivalence/call_pair\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Output":"--- PASS: TestMode1CodexSemanticEquivalence/call_pair (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Output":"=== RUN TestMode1CodexSemanticEquivalence/model_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Output":"--- PASS: TestMode1CodexSemanticEquivalence/model_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Output":"=== RUN TestMode1CodexSemanticEquivalence/minimal_compatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Output":"--- PASS: TestMode1CodexSemanticEquivalence/minimal_compatibility (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode"}
- {"Time":"2026-09-12T11:42:35.2456864+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Output":"=== RUN TestMode1CodexSemanticEquivalence/legacy_pro_mode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Output":"--- PASS: TestMode1CodexSemanticEquivalence/legacy_pro_mode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Output":"=== RUN TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Output":"--- PASS: TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Output":"--- PASS: TestMode1CodexSemanticEquivalence (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_text\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_text (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_system\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_system (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_reference\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_reference (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_result\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_result (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget"}
- {"Time":"2026-09-12T11:42:35.2461963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_budget\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_budget (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Output":"=== RUN TestMode1GuardAcceptsActualCodexTransform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Output":"--- PASS: TestMode1GuardAcceptsActualCodexTransform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Output":"=== RUN TestMode1GuardRejectsInvalidJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Output":"--- PASS: TestMode1GuardRejectsInvalidJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations"}
- {"Time":"2026-09-12T11:42:35.2467042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Output":"=== RUN TestMode1V3StandardWSSPoolSeparatesConversations\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2508269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Output":"--- PASS: TestMode1V3StandardWSSPoolSeparatesConversations (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2508269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Elapsed":0}
- {"Time":"2026-09-12T11:42:35.2508269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames"}
- {"Time":"2026-09-12T11:42:35.2508269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"=== RUN TestMode1V3WSPassthroughAcceptsCompatibilityFrames\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.2513366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.251Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=72 model=gpt-5.2 previous_response_id=- first_message_type=text first_message_bytes=118\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2513366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.251Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=72 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2513366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:35.251Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":72,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:42:35.2523625+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.252Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=72 status_code=101 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2528871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.252Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=relay_start direction=- msg_type=text bytes=118 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2528871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.252Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=118 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2528871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.252Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=72 turn=1 request_id=resp_local terminal_event=response.completed turn_requested_model=gpt-5.2 turn_upstream_model=gpt-5.2 duration_ms=0 first_token_ms=-1 input_tokens=0 output_tokens=0 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2528871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.252Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=72 turn=2 request_id=resp_local terminal_event=response.completed turn_requested_model=gpt-5.2 turn_upstream_model=gpt-5.2 duration_ms=0 first_token_ms=-1 input_tokens=0 output_tokens=0 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2533979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.252Z\",\"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=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.2533979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:35.253Z\",\"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=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:35.6010058+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"testing: warning: no tests to run\n"}
- {"Time":"2026-09-12T11:42:35.6010058+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:35.6021018+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint\t0.799s [no tests to run]\n"}
- {"Time":"2026-09-12T11:42:35.6021018+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Elapsed":0.799}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.454Z\",\"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=true wrote_downstream=true err=context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.454Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.454Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=72 request_id=resp_local terminal_event=response.completed duration_ms=1201 c2u_frames=2 u2c_frames=4 dropped_frames=0 turns=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"--- PASS: TestMode1V3WSPassthroughAcceptsCompatibilityFrames (1.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Elapsed":1.2}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"=== RUN TestNormalizeKnownOpenAICodexModelGPT6Astra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"--- PASS: TestNormalizeKnownOpenAICodexModelGPT6Astra (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09"}
- {"Time":"2026-09-12T11:42:36.4541858+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Output":"=== RUN TestNormalizeCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Output":"--- PASS: TestNormalizeCodexModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Output":"=== RUN TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Output":"--- PASS: TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Output":"=== RUN TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Output":"--- PASS: TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Output":"=== RUN TestProjectAccountModelsCannotExposeCodexMediaThroughAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Output":"--- PASS: TestProjectAccountModelsCannotExposeCodexMediaThroughAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false"}
- {"Time":"2026-09-12T11:42:36.454854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4553685+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:42:36.455Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex-max stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4553685+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:42:36.455Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-codex-max\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4553685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4558797+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4558797+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true"}
- {"Time":"2026-09-12T11:42:36.4558797+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4558797+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:42:36.455Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex-max stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4558797+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:42:36.455Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-codex-max\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.45639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.45639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.45639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.45639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.45639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator"}
- {"Time":"2026-09-12T11:42:36.45639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4574044+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.457Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey"}
- {"Time":"2026-09-12T11:42:36.4579122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4584958+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.458Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4401,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.459Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=4402 name=oauth-raw type=oauth model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.459Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":4402,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata"}
- {"Time":"2026-09-12T11:42:36.459045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4596233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.459Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4403,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.460Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4404,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:42:36.460Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"curl/8.0\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.2\",\"request_headers\":{\"user-agent\":\"curl/8.0\"},\"request_body_size\":85}\n"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+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:42:36.460Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"}
- {"Time":"2026-09-12T11:42:36.4601834+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:42:36.460Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4601834+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:42:36.460Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode"}
- {"Time":"2026-09-12T11:42:36.4601834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4601834+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:42:36.460Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_originator_matched\"}\n"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.46075+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:42:36.460Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Output":"=== RUN TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Output":"--- PASS: TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_NilUsage\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_NilUsage (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_NoBengalfox\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_NoBengalfox (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools"}
- {"Time":"2026-09-12T11:42:36.46075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"=== RUN TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"--- PASS: TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.46126+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"=== RUN TestOpenAISetupTokenChatCompletionsUsesCodexTransform\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai chat_completions: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":71,\"original_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":false,\"responses_shape\":false,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"9717875cd9aa4b57\"}\n"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":71,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"--- PASS: TestOpenAISetupTokenChatCompletionsUsesCodexTransform (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"=== RUN TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":72,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4617662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.461Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4622757+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":72,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4622757+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4622757+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"--- PASS: TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4622757+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4622757+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite"}
- {"Time":"2026-09-12T11:42:36.4622757+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_tool_injected account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_tool_choice_auto account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_bridge_instructions_added account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":31,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=31 account_type=oauth transport=responses_websockets_v2 ws_host=chatgpt.com ws_path=/backend-api/codex/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=31 account_type=oauth transport=responses_websockets_v2 ws_host=chatgpt.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4627857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=31 turn=1 conn_id=oa_ws_31_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.462Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=1 conn_id=oa_ws_31_1 payload_bytes=672\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=1 conn_id=oa_ws_31_1 response_id=resp_codex_image_bridge duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=31 turn=1 next_turn=2 conn_id=oa_ws_31_1 previous_response_id=resp_codex_image_bridge previous_response_id_kind=response_id last_turn_response_id=resp_codex_image_bridge chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=31 turn=2 conn_id=oa_ws_31_1 action=drop_previous_response_id_full_create reason=non_input_changed previous_response_id=resp_codex_image_bridge expected_previous_response_id=resp_codex_image_bridge has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=2 conn_id=oa_ws_31_1 payload_bytes=648\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=2 conn_id=oa_ws_31_1 response_id=resp_codex_image_lite duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4633108+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=31 turn=2 next_turn=3 conn_id=oa_ws_31_1 previous_response_id=resp_codex_image_lite previous_response_id_kind=response_id last_turn_response_id=resp_codex_image_lite chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=31 turn=3 conn_id=oa_ws_31_1 action=drop_previous_response_id_full_create reason=non_input_changed previous_response_id=resp_codex_image_lite expected_previous_response_id=resp_codex_image_lite has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=3 conn_id=oa_ws_31_1 payload_bytes=543\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=3 conn_id=oa_ws_31_1 response_id=resp_codex_image_function duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.463Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=31 conn_id=oa_ws_31_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4638246+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Output":"=== RUN TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Output":"--- PASS: TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"=== RUN TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"--- PASS: TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4643316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4405 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4405 account_type=oauth model=gpt-5.2 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4405 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4405 attempt=1 event=response.create payload_keys=client_metadata,input,instructions,model,prompt_cache_key,store,stream,type payload_bytes=22894 payload_key_sizes=instructions:21671,client_metadata:613,prompt_cache_key:36,input:31,type:15,model:7 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=true has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4405,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4405 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6d83ac66dd39... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=167 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=4065c8ec-c2ce-48bd-9198-53c4c5e30d6e header_conversation_id=- session_id_source=header_session-id conversation_id_source=none has_prompt_cache_key=true has_chatgpt_account_id=true has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4405 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_4405_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4405 conn_id=oa_ws_4405_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4405 conn_id=oa_ws_4405_1 stream=true payload_bytes=22894 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=4405 conn_id=oa_ws_4405_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"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=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4648395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.464Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=4405 request_id=resp_ws_fingerprint stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache"}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.465Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=73 turn=1 response_id=resp_grok_codex_lite payload_bytes=484 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.465347+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4658577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation"}
- {"Time":"2026-09-12T11:42:36.4658577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"=== RUN TestMode1WSSActualHandshakeAndFramePreservation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.467416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.467Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.467416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"--- PASS: TestMode1WSSActualHandshakeAndFramePreservation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.467416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.467416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation"}
- {"Time":"2026-09-12T11:42:36.467416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"=== RUN TestMode1WSSTransportCacheIsolationAndProfileRotation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4679494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"--- PASS: TestMode1WSSTransportCacheIsolationAndProfileRotation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4679494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4679494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate"}
- {"Time":"2026-09-12T11:42:36.4679494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4679494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate"}
- {"Time":"2026-09-12T11:42:36.4679494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Elapsed":0.02}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate (0.02s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Elapsed":0.02}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility"}
- {"Time":"2026-09-12T11:42:36.4840308+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"=== RUN TestMode1WSConnectionPoolTransportCompatibility\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4856426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.485Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.4871971+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.487Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.4882212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.488Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.4892552+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.489Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.489784+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"--- PASS: TestMode1WSConnectionPoolTransportCompatibility (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.489784+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:36.489784+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated"}
- {"Time":"2026-09-12T11:42:36.489784+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"=== RUN TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4913478+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.491Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.4923724+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.492Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"--- PASS: TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed"}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"=== RUN TestMode1WSRuntimeConcurrencyCapCannotBeBypassed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"--- PASS: TestMode1WSRuntimeConcurrencyCapCannotBeBypassed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Elapsed":0}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS"}
- {"Time":"2026-09-12T11:42:36.4960073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"=== RUN TestMode1WSPassthroughEntryReachesRealTLS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:36.4965344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.496Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=45 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4965344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.496Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=45 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4965344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.496Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":45,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"}
- {"Time":"2026-09-12T11:42:36.4965344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.496Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":45,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:36.4980692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:36.498Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:36.4980692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=45 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4980692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_start direction=- msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4980692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4985753+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:36.4985753+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:36.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:37.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:37.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:37.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:37.498Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=45 request_id=- terminal_event=- duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"--- PASS: TestMode1WSPassthroughEntryReachesRealTLS (1.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Elapsed":1}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough"}
- {"Time":"2026-09-12T11:42:37.4984775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.4994939+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:37.499Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=46 model=gpt-5.4 previous_response_id=- first_message_type=text first_message_bytes=122\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:37.4994939+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.4994939+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Elapsed":0}
- {"Time":"2026-09-12T11:42:37.4994939+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool"}
- {"Time":"2026-09-12T11:42:37.4994939+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Elapsed":0}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Elapsed":0}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy"}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http"}
- {"Time":"2026-09-12T11:42:37.5005369+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/http\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5020682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:37.502Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:37.502587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/http (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.502587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Elapsed":0}
- {"Time":"2026-09-12T11:42:37.502587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https"}
- {"Time":"2026-09-12T11:42:37.502587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/https\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5052367+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:37.505Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"}
- {"Time":"2026-09-12T11:42:37.5062572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/https (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5062572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Elapsed":0}
- {"Time":"2026-09-12T11:42:37.5062572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:37.5062572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:37.5062572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:42:37.5062572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:39.5064321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:39.5064321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Elapsed":2}
- {"Time":"2026-09-12T11:42:39.5064321+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:42:39.5064321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:39.7071315+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:39.7071315+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Elapsed":0.2}
- {"Time":"2026-09-12T11:42:39.7071315+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites"}
- {"Time":"2026-09-12T11:42:39.7071315+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:39.9074683+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:39.9081384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Elapsed":0.2}
- {"Time":"2026-09-12T11:42:39.9081384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:42:39.9081384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4763311+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL"}
- {"Time":"2026-09-12T11:42:40.4763311+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"=== RUN TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4763311+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"--- PASS: TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4763311+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.4763311+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling"}
- {"Time":"2026-09-12T11:42:40.4763311+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"=== RUN TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"--- PASS: TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.476845+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.4773617+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile"}
- {"Time":"2026-09-12T11:42:40.4773617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"=== RUN TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4773617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"--- PASS: TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4773617+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.4773617+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello"}
- {"Time":"2026-09-12T11:42:40.4773617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"=== RUN TestMode1DoWithTLSActuallyUsesClientHello\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.480535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"--- PASS: TestMode1DoWithTLSActuallyUsesClientHello (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.480535+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.480535+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy"}
- {"Time":"2026-09-12T11:42:40.480535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"=== RUN TestMode1SchedulerProjectionRetainsPolicyAndProxy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4810468+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"--- PASS: TestMode1SchedulerProjectionRetainsPolicyAndProxy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4810468+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.4810468+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease"}
- {"Time":"2026-09-12T11:42:40.4810468+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Output":"=== RUN TestMode1ConcurrencySlotsRemainBoundedAndRelease\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4831348+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Output":"--- PASS: TestMode1ConcurrencySlotsRemainBoundedAndRelease (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4831348+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Elapsed":0}
- {"Time":"2026-09-12T11:42:40.4831348+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:40.4868523+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/repository\t5.683s\n"}
- {"Time":"2026-09-12T11:42:40.4868523+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Elapsed":5.683}
- {"Time":"2026-09-12T11:42:41.6240871+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON"}
- {"Time":"2026-09-12T11:42:41.6240871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Output":"=== RUN TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Output":"--- PASS: TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Output":"=== RUN TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Output":"--- PASS: TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Output":"=== RUN TestCodexAgentIdentityIndexSeparatesTeamsForSameUser\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Output":"--- PASS: TestCodexAgentIdentityIndexSeparatesTeamsForSameUser (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Output":"=== RUN TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Output":"--- PASS: TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Output":"=== RUN TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Output":"--- PASS: TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Output":"=== RUN TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Output":"--- PASS: TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray"}
- {"Time":"2026-09-12T11:42:41.6246151+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Output":"=== RUN TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Output":"--- PASS: TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Output":"=== RUN TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Output":"--- PASS: TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Output":"=== RUN TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Output":"--- PASS: TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Output":"=== RUN TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Output":"--- PASS: TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Output":"=== RUN TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Output":"--- PASS: TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Output":"=== RUN TestNormalizeCodexImportRejectsExpiredAccessToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Output":"--- PASS: TestNormalizeCodexImportRejectsExpiredAccessToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Output":"=== RUN TestCodexIdentityKeysPreferStrongIdentifiers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Output":"--- PASS: TestCodexIdentityKeysPreferStrongIdentifiers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Output":"=== RUN TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Output":"--- PASS: TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Output":"=== RUN TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Output":"--- PASS: TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Output":"=== RUN TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Output":"--- PASS: TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Output":"=== RUN TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Output":"--- PASS: TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Output":"=== RUN TestCodexAccountIndexUpsertReplacesSameAccount\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Output":"--- PASS: TestCodexAccountIndexUpsertReplacesSameAccount (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Output":"=== RUN TestCodexAccountIndexUpdateRemovesAllPreviousKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Output":"--- PASS: TestCodexAccountIndexUpdateRemovesAllPreviousKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Output":"=== RUN TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Output":"--- PASS: TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Output":"=== RUN TestCodexIdentitySeenDistinguishesTeamMembers\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Output":"--- PASS: TestCodexIdentitySeenDistinguishesTeamMembers (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Output":"=== RUN TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Output":"--- PASS: TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting"}
- {"Time":"2026-09-12T11:42:41.6251354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Output":"=== RUN TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Output":"--- PASS: TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Output":"=== RUN TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Output":"--- PASS: TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Output":"=== RUN TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Output":"--- PASS: TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Output":"=== RUN TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Output":"--- PASS: TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6256434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Elapsed":0}
- {"Time":"2026-09-12T11:42:41.6261517+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.6292372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/handler/admin\t6.825s\n"}
- {"Time":"2026-09-12T11:42:41.6292372+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Elapsed":6.825}
- {"Time":"2026-09-12T11:42:41.908623+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:41.908623+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Elapsed":2}
- {"Time":"2026-09-12T11:42:41.908623+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit"}
- {"Time":"2026-09-12T11:42:41.908623+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"=== RUN TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.908996+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"--- PASS: TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.908996+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Elapsed":2}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"=== RUN TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:43.909Z\",\"msg\":\"[Pricing][SparkBilling] gpt-5.3-codex-spark -\u003e gpt-5.1-codex billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\",\"legacy_printf\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:43.909Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex-spark -\u003e gpt-5.1-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"--- PASS: TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"=== RUN TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:42:43.909Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex -\u003e gpt-5.2-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"--- PASS: TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates"}
- {"Time":"2026-09-12T11:42:43.9096394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Output":"=== RUN TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9134264+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Output":"--- PASS: TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9134264+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9134264+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy"}
- {"Time":"2026-09-12T11:42:43.9134264+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Output":"=== RUN TestGetCodexRestrictionPolicy\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Output":"--- PASS: TestGetCodexRestrictionPolicy (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Output":"=== RUN TestGetCodexRestrictionPolicy_DefaultsSafe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Output":"--- PASS: TestGetCodexRestrictionPolicy_DefaultsSafe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Output":"=== RUN TestGetCodexRestrictionPolicy_InvalidJSONSafe\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Output":"--- PASS: TestGetCodexRestrictionPolicy_InvalidJSONSafe (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾) (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Output":"=== RUN TestValidateCodexClientEntriesJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Output":"--- PASS: TestValidateCodexClientEntriesJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Output":"=== RUN TestValidateCodexWhitelistEntriesJSON\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Output":"--- PASS: TestValidateCodexWhitelistEntriesJSON (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9139385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== CONT TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== CONT TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== CONT TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"}
- {"Time":"2026-09-12T11:42:43.9144454+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== CONT TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== CONT TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== CONT TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== CONT TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== CONT TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== CONT TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== CONT TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== CONT TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"--- PASS: TestShouldRefreshOpenAICodexSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"--- PASS: TestFilterCodexModelIDsForGroupOmitsWildcardKeys (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9149537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9154771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.914Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== CONT TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== CONT TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== CONT TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== CONT TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== CONT TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.915992+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== CONT TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== CONT TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== CONT TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== CONT TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== CONT TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== CONT TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9165897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.916Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== CONT TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== CONT TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== CONT TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.917Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== CONT TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"--- PASS: TestBuildCodexModelsManifestForGroupLoadsAccountsOnce (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"--- PASS: TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"--- PASS: TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9171297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"--- PASS: TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== CONT TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"--- PASS: TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== CONT TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"--- PASS: TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== CONT TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"--- PASS: TestBuildCodexModelsManifestOmitsDedicatedImageModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== CONT TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9176413+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.917Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-4o\",\"upstream_model\":\"gpt-4o\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.918Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-4o\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.918Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== CONT TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"}
- {"Time":"2026-09-12T11:42:43.9181598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.918Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.1\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"c8b82dd52b41c996\"}\n"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== CONT TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== CONT TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.919208+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"--- PASS: TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"--- PASS: TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"--- PASS: TestBuildCodexModelsManifestKeepsKnownReasoningChoices (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"--- PASS: TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"--- PASS: TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"--- PASS: TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"--- PASS: TestConvertOpenAIModelListToCompleteCodexManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"--- PASS: TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"--- PASS: TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.1\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"c8b82dd52b41c996\"}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.918Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.3-codex\",\"upstream_model\":\"gpt-5.3-codex\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"e8bf3c701e17d12d\",\"compat_full_replay_trimmed\":true,\"compat_messages_after_trim\":12}\n"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
- {"Time":"2026-09-12T11:42:43.9197207+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_404 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_404 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.919Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"--- PASS: TestForwardAsAnthropic_ReusesOAuthCodexTurnState (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.920Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-4o\",\"upstream_model\":\"gpt-4o\",\"stream\":true}\n"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_405 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/server_error (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:42:43.920Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-4o\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_401 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9203188+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_405 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"--- PASS: TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/rate_limited (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_403 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_400 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"--- PASS: TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9208329+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4 (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"--- PASS: TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9213467+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities (0.00s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9218611+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Elapsed":0}
- {"Time":"2026-09-12T11:42:43.9218611+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:43.9261253+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:43.9261253+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration (0.01s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:44.1178606+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Elapsed":0.01}
- {"Time":"2026-09-12T11:42:44.1178606+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"--- PASS: TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:44.1185354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Elapsed":0.2}
- {"Time":"2026-09-12T11:42:44.1185354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"--- PASS: TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit (0.20s)\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:44.1185354+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Elapsed":0.2}
- {"Time":"2026-09-12T11:42:44.1185354+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"PASS\n","OutputType":"frame"}
- {"Time":"2026-09-12T11:42:44.1331736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/service\t11.256s\n"}
- {"Time":"2026-09-12T11:42:44.1331736+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Elapsed":11.256}
|