{"Time":"2026-09-12T11:38:26.9418399+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/service"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"2026/09/12 03:38:28 Timezone initialized: UTC (UTC offset: +00:00)\n"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"=== RUN TestPreviewAntiDegradeOpenAI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"--- PASS: TestPreviewAntiDegradeOpenAI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Elapsed":0} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"=== RUN TestPreviewAntiDegradeAnthropic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"--- PASS: TestPreviewAntiDegradeAnthropic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Elapsed":0} {"Time":"2026-09-12T11:38:28.9128759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"=== RUN TestPreviewAntiDegradeNothingToDo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"--- PASS: TestPreviewAntiDegradeNothingToDo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"=== RUN TestPreviewAntiDegradeAlreadyEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"--- PASS: TestPreviewAntiDegradeAlreadyEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"=== RUN TestApplyRevertAntiDegrade\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"--- PASS: TestApplyRevertAntiDegrade (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"=== RUN TestRevertAntiDegradeRejectsBadSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"--- PASS: TestRevertAntiDegradeRejectsBadSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=true_→_true","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_allow_app_server=false_→_false","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_开_+_字段缺失_→_false","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Output":"=== RUN TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed/codex_cli_only_关_→_即便_allow_app_server=true_也_false","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Output":"--- PASS: TestAccount_IsCodexCLIOnlyAppServerAllowed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyAppServerAllowed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Output":"=== RUN TestBulkUpdateAccountsDoesNotPrewriteCodexSeed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Output":"--- PASS: TestBulkUpdateAccountsDoesNotPrewriteCodexSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBulkUpdateAccountsDoesNotPrewriteCodexSeed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"=== RUN TestDuplicateAccountDoesNotCopyCodexFingerprintSeed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"--- PASS: TestDuplicateAccountDoesNotCopyCodexFingerprintSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Output":"=== RUN TestAccountServiceCreateAndUpdateCodexSeedLifecycle\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Output":"--- PASS: TestAccountServiceCreateAndUpdateCodexSeedLifecycle (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountServiceCreateAndUpdateCodexSeedLifecycle","Elapsed":0} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads"} {"Time":"2026-09-12T11:38:28.9133905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"=== RUN TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"--- PASS: TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"=== RUN TestMode1RuntimeRejectsConfigurationDrift\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"--- PASS: TestMode1RuntimeRejectsConfigurationDrift (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"=== RUN TestMode1InvalidMarkerDoesNotDowngrade\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"--- PASS: TestMode1InvalidMarkerDoesNotDowngrade (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"=== RUN TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"--- PASS: TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"=== RUN TestMode1PartialAndBulkUpdatesCannotDisablePolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"--- PASS: TestMode1PartialAndBulkUpdatesCannotDisablePolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"=== RUN TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"--- PASS: TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Output":"=== RUN TestMode1UsesExistingPluginRouting\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Output":"--- PASS: TestMode1UsesExistingPluginRouting (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1UsesExistingPluginRouting","Elapsed":0} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget"} {"Time":"2026-09-12T11:38:28.9160261+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"=== RUN TestMode1IntegrityPreservesReasoningToolsAndBudget\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"--- PASS: TestMode1IntegrityPreservesReasoningToolsAndBudget (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Elapsed":0} {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough"} {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false"} {"Time":"2026-09-12T11:38:28.9165634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9181443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Elapsed":0} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name=mode1 type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Elapsed":0} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Output":"=== RUN TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Output":"--- PASS: TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3MigrationPreservesOriginalSnapshotAndIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Output":"=== RUN TestMode1InvalidVersionCanBeExplicitlyRestored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Output":"--- PASS: TestMode1InvalidVersionCanBeExplicitlyRestored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidVersionCanBeExplicitlyRestored","Elapsed":0} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Output":"=== RUN TestMode1V3StandardTransportWithTLSGloballyDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Output":"--- PASS: TestMode1V3StandardTransportWithTLSGloballyDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardTransportWithTLSGloballyDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0"} {"Time":"2026-09-12T11:38:28.9186656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=0","Elapsed":0} {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1"} {"Time":"2026-09-12T11:38:28.9202146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=1","Elapsed":0} {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2"} {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: , type: oauth, isCodexCLI: false)\n"} {"Time":"2026-09-12T11:38:28.92179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: )\n"} {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=2","Elapsed":0} {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3"} {"Time":"2026-09-12T11:38:28.9238503+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=3","Elapsed":0} {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4"} {"Time":"2026-09-12T11:38:28.9253875+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=false/body=4","Elapsed":0} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=0","Elapsed":0} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9266474+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=1","Elapsed":0} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.4-high stream=true\n"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=2","Elapsed":0} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=3","Elapsed":0} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4"} {"Time":"2026-09-12T11:38:28.9271556+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v2/passthrough=true/body=4","Elapsed":0} {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0"} {"Time":"2026-09-12T11:38:28.9276775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=0","Elapsed":0} {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1"} {"Time":"2026-09-12T11:38:28.928702+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=1","Elapsed":0} {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2"} {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9307428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: , type: oauth, isCodexCLI: false)\n"} {"Time":"2026-09-12T11:38:28.9312541+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"2026/09/12 03:38:28 [OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: )\n"} {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=2","Elapsed":0} {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3"} {"Time":"2026-09-12T11:38:28.9322955+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=3","Elapsed":0} {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4"} {"Time":"2026-09-12T11:38:28.9333661+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=false/body=4","Elapsed":0} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=0","Elapsed":0} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=1","Elapsed":0} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9349717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.4-high stream=true\n"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=2","Elapsed":0} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=3","Elapsed":0} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"=== RUN TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=1 name= type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3/v3/passthrough=true/body=4","Elapsed":0} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Output":"--- PASS: TestMode1ForwardRegressionV2AndV3 (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardRegressionV2AndV3","Elapsed":0.02} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Output":"=== RUN TestAccountGetOpenAICompactMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/nil_account_defaults_to_auto","Elapsed":0} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9354888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/non_openai_account_defaults_to_auto","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/missing_extra_defaults_to_auto","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto","Output":"=== RUN TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto","Output":"--- PASS: TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/invalid_mode_falls_back_to_auto","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized","Output":"=== RUN TestAccountGetOpenAICompactMode/force_on_is_normalized\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized","Output":"--- PASS: TestAccountGetOpenAICompactMode/force_on_is_normalized (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_on_is_normalized","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized","Output":"=== RUN TestAccountGetOpenAICompactMode/force_off_is_normalized\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized","Output":"--- PASS: TestAccountGetOpenAICompactMode/force_off_is_normalized (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode/force_off_is_normalized","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Output":"--- PASS: TestAccountGetOpenAICompactMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountGetOpenAICompactMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Output":"=== RUN TestAccountOpenAICompactSupportKnown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/nil_account_is_unknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/nil_account_is_unknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/nil_account_is_unknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/non_openai_account_is_unknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state","Output":"=== RUN TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_on_overrides_probe_state","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state","Output":"=== RUN TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/force_off_overrides_probe_state","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported","Output":"=== RUN TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_true_is_known_supported","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported","Output":"=== RUN TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_false_is_known_unsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/auto_without_probe_state_remains_unknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown","Output":"=== RUN TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown/invalid_probe_field_remains_unknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Output":"--- PASS: TestAccountOpenAICompactSupportKnown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountOpenAICompactSupportKnown","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Output":"=== RUN TestAccountAllowsOpenAICompact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact","Output":"=== RUN TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact","Output":"--- PASS: TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/nil_account_does_not_allow_compact","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact","Output":"=== RUN TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact","Output":"--- PASS: TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/non_openai_account_does_not_allow_compact","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed","Output":"=== RUN TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed","Output":"--- PASS: TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unknown_openai_account_remains_allowed","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed","Output":"=== RUN TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed","Output":"--- PASS: TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/supported_openai_account_is_allowed","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected","Output":"=== RUN TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected","Output":"--- PASS: TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/unsupported_openai_account_is_rejected","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed","Output":"=== RUN TestAccountAllowsOpenAICompact/force_on_is_allowed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed","Output":"--- PASS: TestAccountAllowsOpenAICompact/force_on_is_allowed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_on_is_allowed","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected","Output":"=== RUN TestAccountAllowsOpenAICompact/force_off_is_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected","Output":"--- PASS: TestAccountAllowsOpenAICompact/force_off_is_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact/force_off_is_rejected","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Output":"--- PASS: TestAccountAllowsOpenAICompact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountAllowsOpenAICompact","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/新字段开启\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/新字段开启 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/新字段开启","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/兼容旧字段","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/非OpenAI账号始终关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Output":"=== RUN TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled/空额外配置默认关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Output":"--- PASS: TestAccount_IsOpenAIPassthroughEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIPassthroughEnabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Output":"=== RUN TestAccount_IsOpenAIOAuthPassthroughEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启","Output":"=== RUN TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启","Output":"--- PASS: TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled/仅OAuth类型允许返回开启","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Output":"--- PASS: TestAccount_IsOpenAIOAuthPassthroughEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIOAuthPassthroughEnabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_开启","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/OpenAI_OAuth_关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/字段缺失默认关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/类型非法默认关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Output":"=== RUN TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled/非_OAuth_账号始终关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Output":"--- PASS: TestAccount_IsCodexCLIOnlyEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsCodexCLIOnlyEnabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth使用OAuth专用开关","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/API_Key使用API_Key专用开关","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/OAuth账号不会读取API_Key专用开关","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型新键优先于兼容键","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/分类型键缺失时回退兼容键","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭","Output":"=== RUN TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled/非OpenAI账号默认关闭","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Output":"--- PASS: TestAccount_IsOpenAIResponsesWebSocketV2Enabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_IsOpenAIResponsesWebSocketV2Enabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/default_fallback_to_ctx_pool","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_field_has_highest_priority","Elapsed":0} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/oauth_mode_supports_http_bridge","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_enabled_maps_to_ctx_pool","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/shared/dedicated_mode_strings_are_compatible_with_ctx_pool","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/legacy_disabled_maps_to_off","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off","Output":"=== RUN TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode/non_openai_always_off","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Output":"--- PASS: TestAccount_ResolveOpenAIResponsesWebSocketV2Mode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_ResolveOpenAIResponsesWebSocketV2Mode","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Output":"=== RUN TestAccount_OpenAIWSExtraFlags\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Output":"--- PASS: TestAccount_OpenAIWSExtraFlags (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccount_OpenAIWSExtraFlags","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Output":"=== RUN TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Output":"--- PASS: TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHydrationResolvesRandomProxyWithoutSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields"} {"Time":"2026-09-12T11:38:28.936534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Output":"=== RUN TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Output":"--- PASS: TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthPopulatesPickerFields","Elapsed":0} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Output":"=== RUN TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Output":"--- PASS: TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsAPIKeyPopulatesPickerFields","Elapsed":0} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Output":"=== RUN TestFetchOpenAIAccountModelsPreservesEmptyCatalog\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Output":"--- PASS: TestFetchOpenAIAccountModelsPreservesEmptyCatalog (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsPreservesEmptyCatalog","Elapsed":0} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist"} {"Time":"2026-09-12T11:38:28.9391043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Output":"=== RUN TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Output":"--- PASS: TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIAccountModelsOAuthRespectsImageAllowlist","Elapsed":0} {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport"} {"Time":"2026-09-12T11:38:28.9396156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuthSuccessPersistsSupport","Elapsed":0} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Output":"2026/09/12 03:38:28 Account test error: API returned 404: 404 page not found\n"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactOAuth404MarksUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyUsesNativeResponsesPath","Elapsed":0} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactAPIKeyDefaultBaseURLUsesResponsesPath","Elapsed":0} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Output":"2026/09/12 03:38:28 Account test error: Upstream returned 2xx without a compaction output item (native remote compaction v2 unsupported on this chain)\n"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompact2xxWithoutItemMarksUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic","Output":"=== RUN TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic","Output":"--- PASS: TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_TestAccountConnection_OpenAICompactProbeIdentityMatchesRealTraffic","Elapsed":0} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback"} {"Time":"2026-09-12T11:38:28.9401252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Output":"=== RUN TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Output":"--- PASS: TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthHandlesOutputItemDoneFallback","Elapsed":0} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Output":"=== RUN TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Output":"--- PASS: TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageAPIKeyUsesConfiguredV1BaseURL","Elapsed":0} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Output":"=== RUN TestAccountTestService_OpenAIImageOAuthSurfacesSSEError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Output":"2026/09/12 03:38:28 Account test error: The selected image model is unavailable\n"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Output":"--- PASS: TestAccountTestService_OpenAIImageOAuthSurfacesSSEError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestService_OpenAIImageOAuthSurfacesSSEError","Elapsed":0} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"=== RUN TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"=== PAUSE TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== RUN TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== PAUSE TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== RUN TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== PAUSE TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== RUN TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== PAUSE TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== RUN TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== PAUSE TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== RUN TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== PAUSE TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== PAUSE TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer","Output":"=== RUN TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer","Output":"--- PASS: TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeAnthropicBridge_OllamaCloudBearer","Elapsed":0} {"Time":"2026-09-12T11:38:28.9406283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip"} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Output":"=== RUN TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Output":"--- PASS: TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupCodexModelsManifestRoundtrip","Elapsed":0} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip"} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Output":"=== RUN TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Output":"--- PASS: TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9411378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAPIKeyAuthSnapshotGroupForceOpenAIFastRoundtrip","Elapsed":0} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Output":"=== RUN TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Output":"--- PASS: TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatAgentToolLoopSkipsAudit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Output":"=== RUN TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Output":"--- PASS: TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatMultiTurnExtractsLatestUser","Elapsed":0} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Output":"=== RUN TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Output":"--- PASS: TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIChatUsesLastUserMessage","Elapsed":0} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Output":"=== RUN TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Output":"--- PASS: TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIImagesIncludesPromptAndImages","Elapsed":0} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Output":"=== RUN TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Output":"--- PASS: TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractContentModerationInput_OpenAIResponsesCodexPayloadUsesLastUserMessage","Elapsed":0} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload"} {"Time":"2026-09-12T11:38:28.9416582+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"=== RUN TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9530086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:38:28 INFO content_moderation.config_loaded user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses provider=openai protocol=openai_responses model=gpt-5.5 enabled=true mode=pre_block all_groups=true configured_group_ids=[] in_group_scope=true model_filter_type=all configured_models=[] in_model_scope=true sample_rate=100 api_key_count=1 pre_hash_check_enabled=false record_non_hits=true\n"} {"Time":"2026-09-12T11:38:28.9537776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:38:28 INFO content_moderation.input_extracted user_id=1001 api_key_id=0 group_id=0 endpoint=/responses protocol=openai_responses text_runes=16 image_count=0\n"} {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"2026/09/12 03:38:28 INFO content_moderation.audit_result user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses protocol=openai_responses mode=pre_block allow_block=true flagged=false blocked=false action=allow highest_category=sexual highest_score=0.01 latency_ms=1 queue_delay_ms=\u003cnil\u003e\n"} {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Output":"--- PASS: TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_OpenAIResponsesRecordsNonHitForCodexPayload","Elapsed":0.01} {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput"} {"Time":"2026-09-12T11:38:28.9542803+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"=== RUN TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9547925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:38:28 INFO content_moderation.config_loaded user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses provider=openai protocol=openai_responses model=gpt-5.5 enabled=true mode=pre_block all_groups=true configured_group_ids=[] in_group_scope=true model_filter_type=all configured_models=[] in_model_scope=true sample_rate=100 api_key_count=1 pre_hash_check_enabled=false record_non_hits=false\n"} {"Time":"2026-09-12T11:38:28.9547925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:38:28 INFO content_moderation.input_extracted user_id=1001 api_key_id=0 group_id=0 endpoint=/responses protocol=openai_responses text_runes=21 image_count=0\n"} {"Time":"2026-09-12T11:38:28.955326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"2026/09/12 03:38:28 INFO content_moderation.audit_result user_id=1001 api_key_id=0 group_id=0 group_name=\"\" endpoint=/responses protocol=openai_responses mode=pre_block allow_block=true flagged=true blocked=true action=block highest_category=sexual highest_score=0.9 latency_ms=0 queue_delay_ms=\u003cnil\u003e\n"} {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Output":"--- PASS: TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestContentModerationCheck_PreBlockBlocksCodexResponsesLatestUserInput","Elapsed":0.01} {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault"} {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Output":"=== RUN TestOpenAIHandleErrorResponse_NoRuleKeepsDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9659002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Output":"--- PASS: TestOpenAIHandleErrorResponse_NoRuleKeepsDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_NoRuleKeepsDefault","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Output":"=== RUN TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Output":"--- PASS: TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_ContextWindow502KeepsMessageWithoutFailover","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Output":"=== RUN TestOpenAIHandleErrorResponse_AppliesRuleFor422\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Output":"--- PASS: TestOpenAIHandleErrorResponse_AppliesRuleFor422 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_AppliesRuleFor422","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Output":"=== RUN TestOpenAIHandleErrorResponse_SetsResponseCommitted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Output":"--- PASS: TestOpenAIHandleErrorResponse_SetsResponseCommitted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHandleErrorResponse_SetsResponseCommitted","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_only_ignores_stale_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/passthrough_wins_over_ordinary_account_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist","Output":"=== RUN TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback/ordinary_accounts_preserve_mapped_whitelist","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Output":"--- PASS: TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_OpenAIPassthroughUsesDefaultFallback","Elapsed":0} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Output":"=== RUN TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Output":"--- PASS: TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9664251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetAvailableModels_GlobalListPreservesMappedModelsWithOpenAIPassthrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE"} {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Output":"=== RUN TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Output":"--- PASS: TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9669324+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGeminiForwardAsChatCompletions_StreamsOpenAIChunksFromGeminiSSE","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"=== RUN TestApplyGrokImagineImageGeometryMapsOpenAISize\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"=== PAUSE TestApplyGrokImagineImageGeometryMapsOpenAISize\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Output":"=== RUN TestWithHTTPUpstreamProfile_OpenAI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Output":"--- PASS: TestWithHTTPUpstreamProfile_OpenAI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithHTTPUpstreamProfile_OpenAI","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/top-level_image_gen_namespace_is_passive","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/responses_lite_additional_tools_image_gen_is_passive","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/legacy_adapter_flattened_image_gen_function_declaration_is_passive","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_declaration_remains_explicit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/native_image_generation_tool_choice_is_explicit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_namespace_tool_choice_is_explicit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/flattened_image_gen_function_tool_choice_is_explicit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/wrapped_image_gen_function_tool_choice_is_explicit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/vision_input_is_not_image_generation","Elapsed":0} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9674426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/ordinary_function_declaration_is_not_image_generation","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_gen_function_call_history_is_not_current_intent","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Output":"=== RUN TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations/image_generation_call_history_is_not_current_intent","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Output":"--- PASS: TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsImageGenerationIntentForPlatform_GrokCodexDeclarations","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigUsesCurrentBodyModel","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigToolModelWins\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigToolModelWins (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigToolModelWins","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigFromBodyIgnoresUnrelatedLargeInput","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_2k_landscape","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/official_4k_landscape","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/custom_valid_2k","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/default_image_tool_model_supports_flexible_size","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes/top_level_image_size_is_moved_into_billing","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigSupportsOfficialAndCustomSizes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Output":"=== RUN TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Output":"--- PASS: TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIResponsesImageBillingConfigDoesNotRejectUnknownSizes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Output":"=== RUN TestOpenAIImageOutputCounterDeduplicatesFinalImages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Output":"--- PASS: TestOpenAIImageOutputCounterDeduplicatesFinalImages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterDeduplicatesFinalImages","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Output":"=== RUN TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Output":"--- PASS: TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsImagesAPIStreamShapes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Output":"=== RUN TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Output":"--- PASS: TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEDataPayload","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Output":"=== RUN TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Output":"--- PASS: TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterCountsMultilineSSEBodyPayload","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Output":"=== RUN TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Output":"--- PASS: TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounterFallsBackForInvalidMultilineSSEBody","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Output":"=== RUN TestCollectOpenAIResponseImageOutputSizesFromJSONBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Output":"--- PASS: TestCollectOpenAIResponseImageOutputSizesFromJSONBytes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromJSONBytes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Output":"=== RUN TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Output":"--- PASS: TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIResponseImageOutputSizesFromImagesAPIData","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Output":"=== RUN TestCollectOpenAIImageOutputSizesFromSSEBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Output":"--- PASS: TestCollectOpenAIImageOutputSizesFromSSEBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImageOutputSizesFromSSEBody","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Output":"=== RUN TestOpenAIImageOutputCounter_TextOnlyMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Output":"--- PASS: TestOpenAIImageOutputCounter_TextOnlyMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_TextOnlyMessage","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse","Output":"=== RUN TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse","Output":"--- PASS: TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_NestedSub2API_StandardResponse","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly","Output":"=== RUN TestOpenAIImageOutputCounter_JSONResponse_TextOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly","Output":"--- PASS: TestOpenAIImageOutputCounter_JSONResponse_TextOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_TextOnly","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive","Output":"=== RUN TestOpenAIImageOutputCounter_DataArray_FalsePositive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive","Output":"--- PASS: TestOpenAIImageOutputCounter_DataArray_FalsePositive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_DataArray_FalsePositive","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive","Output":"=== RUN TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive","Output":"--- PASS: TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_JSONResponse_DataArray_FalsePositive","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion","Output":"=== RUN TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion","Output":"--- PASS: TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_PassthroughSSEToJSON_Conversion","Elapsed":0} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"} {"Time":"2026-09-12T11:38:28.9679536+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/standard_response.done_event","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_null_data_field","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_empty_data_array","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Output":" image_output_accounting_test.go:228: count=1 (maxDataCount=1, count=0)\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/response_with_single-element_data_array","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/image_generation.completed_event_without_result","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Output":"=== RUN TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Output":" image_output_accounting_test.go:228: count=0 (maxDataCount=0, count=0)\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources/output_item_with_empty_type","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources","Output":"--- PASS: TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddDataArray_FromVariousSources","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported","Output":"=== RUN TestOpenAIImageOutputCounter_AddJSONResponse_Exported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Output":"=== RUN TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Output":" image_output_accounting_test.go:251: count=0\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Output":"--- PASS: TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/standard_/v1/responses_JSON_response","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Output":"=== RUN TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Output":" image_output_accounting_test.go:251: count=1\n"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Output":"--- PASS: TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported/response_with_data_field_(like_/v1/images/generations)","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported","Output":"--- PASS: TestOpenAIImageOutputCounter_AddJSONResponse_Exported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImageOutputCounter_AddJSONResponse_Exported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Output":"=== RUN TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Output":"--- PASS: TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeAnthropicUsageNormalizesKimiStreamForOpenAIBilling","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Output":"=== RUN TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Output":"=== RUN TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Output":"--- PASS: TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/GLM","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Output":"=== RUN TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Output":"--- PASS: TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets/DeepSeek","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Output":"--- PASS: TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClaudeUsageToOpenAIUsagePreservesCNProviderNativeAnthropicBuckets","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_detail_payload","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_codex_plan_gated_error_message_payload","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_unrelated_invalid_request_does_not_match","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/404_with_plan_gated_message_does_not_match","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Output":"=== RUN TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError/400_empty_body_does_not_match","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Output":"--- PASS: TestIsOpenAICodexPlanGatedModelError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICodexPlanGatedModelError","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/structured_code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/structured_code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_code","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/unknown_provider\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/unknown_provider (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/unknown_provider","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/model_not_found\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/model_not_found (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_not_found","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/model_unsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/model_unsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/model_unsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/plain_text_compatible_gateway","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/invalid_parameter_remains_terminal","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_code_overrides_model_not_found_message","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/structured_non-matching_error_code_overrides_unsupported_message","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored","Output":"=== RUN TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400/echoed_phrase_is_ignored","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Output":"--- PASS: TestIsOpenAICompatibleModelNotFound400 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompatibleModelNotFound400","Elapsed":0} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool"} {"Time":"2026-09-12T11:38:28.9684637+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Output":"=== RUN TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Output":"--- PASS: TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsModelRateLimited_OpenAIImageGenerationIntentBlocksTextModelImageTool","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/workspace_code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/workspace_code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/workspace_code","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/disabled_account_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/disabled_account_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/disabled_account_message","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_workspace_message","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/deactivated_organization_message","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/scalar_detail\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/scalar_detail (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/scalar_detail","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code","Output":"=== RUN TestOpenAIUpstreamAccessStateClassification/suspended_org_code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification/suspended_org_code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification/suspended_org_code","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Output":"--- PASS: TestOpenAIUpstreamAccessStateClassification (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateClassification","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Output":"=== RUN TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Output":"--- PASS: TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamAccessStateDoesNotScanEchoedJSON","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Output":"=== RUN TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Output":"--- PASS: TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateDoesNotTrustBadRequestMessage","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Output":"=== RUN TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Output":"--- PASS: TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateBadRequestDoesNotDisableAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Output":"=== RUN TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Output":"--- PASS: TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEchoedAccessStateMessageDoesNotDisableOrFailover","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Output":"=== RUN TestOpenAIHTTPAccessStateTrustsStructuredCode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=930 error=\"request rejected\"\n"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Output":"--- PASS: TestOpenAIHTTPAccessStateTrustsStructuredCode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAccessStateTrustsStructuredCode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Output":"=== RUN TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable","Output":"=== RUN TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable","Output":"--- PASS: TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/oauth_401_remains_recoverable","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"=== RUN TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"2026/09/12 03:38:28 [HandleUpstreamErrorRaw] account_id=932 platform=openai type=oauth status=403 request_id= cf_ray= upstream_msg=workspace has been suspended raw_body={\"error\":{\"message\":\"workspace has been suspended\"}}\n"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"2026/09/12 03:38:28 WARN openai_403_temp_unschedulable account_id=932 until=2026-09-12T03:48:28.968Z count=1 threshold=3\n"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Output":"--- PASS: TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies/403_uses_counter_cooldown","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Output":"--- PASS: TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPAuthMessagesUseExistingStatusPolicies","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Output":"=== RUN TestOpenAICyberPolicyWrapped5xxNeverFailsOver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Output":"--- PASS: TestOpenAICyberPolicyWrapped5xxNeverFailsOver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICyberPolicyWrapped5xxNeverFailsOver","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Output":"=== RUN TestOpenAICapacityFailoverCarriesSafeTerminalResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Output":"--- PASS: TestOpenAICapacityFailoverCarriesSafeTerminalResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICapacityFailoverCarriesSafeTerminalResponse","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/unauthorized","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/forbidden","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/rate_limit","Elapsed":0} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529"} {"Time":"2026-09-12T11:38:28.9689745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529","Output":"=== RUN TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes/overload_529","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Output":"--- PASS: TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamSemanticStatusesPreservedAcrossTerminalShapes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Output":"=== RUN TestOpenAIStreamBareErrorUsesSemanticFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Output":"--- PASS: TestOpenAIStreamBareErrorUsesSemanticFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamBareErrorUsesSemanticFailover","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/ordinary_permission_error","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_403_request_status","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/structured_access_state","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_credential_auth_code","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type","Output":"=== RUN TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal/explicit_authentication_type","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Output":"--- PASS: TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403FailoverRequiresStructuredAccountCredentialSignal","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Output":"=== RUN TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Output":"--- PASS: TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403PostOutputAccountSideEffectsIgnoreRequestPermissionErrors","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"=== RUN TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"2026/09/12 03:38:28 [HandleUpstreamErrorRaw] account_id=917 platform=openai type=oauth status=403 request_id= cf_ray= upstream_msg=credential rejected raw_body={\"type\":\"error\",\"error\":{\"type\":\"permission_error\",\"code\":\"invalid_api_key\",\"status_code\":403,\"message\":\"credential rejected\"}}\n"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=917 error=\"Access forbidden (403): credential rejected\"\n"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Output":"--- PASS: TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStream403ExplicitCredentialAuthAppliesAccountSideEffects","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"=== RUN TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"2026/09/12 03:38:28 [HandleUpstreamErrorRaw] account_id=923 platform=openai type=oauth status=403 request_id= cf_ray= upstream_msg= raw_body={\"type\":\"response.failed\",\"response\":{\"error\":{\"type\":\"permission_error\",\"code\":\"invalid_api_key\",\"status_code\":403,\"message\":\"credential rejected\"}}}\n"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=923 error=\"Access forbidden (403): {\\\"type\\\":\\\"response.failed\\\",\\\"response\\\":{\\\"error\\\":{\\\"type\\\":\\\"permission_error\\\",\\\"code\\\":\\\"invalid_api_key\\\",\\\"status_code\\\":403,\\\"message\\\":\\\"credential rejected\\\"}}}\"\n"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Output":"--- PASS: TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStandaloneFailedStructured403AppliesAccountSideEffectsOnce","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Output":"=== RUN TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=924 error=\"workspace is suspended\"\n"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Output":"--- PASS: TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPairedStructured403SideEffectsCanBeDeduplicated","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Output":"=== RUN TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Output":"--- PASS: TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamAccessStateAppliesAccountHealthBeforeFailover","Elapsed":0} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Output":"=== RUN TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Output":"=== RUN TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=921 error=\"OpenAI upstream account or workspace is unavailable\"\n"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Output":"--- PASS: TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9694832+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/native","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Output":"=== RUN TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Output":"2026/09/12 03:38:28 WARN account_disabled_auth_error account_id=922 error=\"OpenAI upstream account or workspace is unavailable\"\n"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Output":"--- PASS: TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Output":"--- PASS: TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamPairedFailureAppliesAccountSideEffectsOnce","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Output":"=== RUN TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Output":"=== RUN TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Output":"--- PASS: TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/oauth","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token","Output":"=== RUN TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token","Output":"--- PASS: TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock/setup-token","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Output":"--- PASS: TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamOAuthLike429GetsDeadlineWithoutImmediateRuntimeBlock","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Output":"=== RUN TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Output":"--- PASS: TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_FirstFailureDoesNotCreateLongBlock","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Output":"=== RUN TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Output":"--- PASS: TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SecondFailureCreatesShortModelBlock","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Output":"=== RUN TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Output":"--- PASS: TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_ThirdFailureCreatesFortyFiveSecondModelBlock","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Output":"=== RUN TestOpenAIModelTransient_BlockIsIsolatedByModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Output":"--- PASS: TestOpenAIModelTransient_BlockIsIsolatedByModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_BlockIsIsolatedByModel","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Output":"=== RUN TestOpenAIModelTransient_SuccessClearsStreakAndBlock\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Output":"--- PASS: TestOpenAIModelTransient_SuccessClearsStreakAndBlock (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessClearsStreakAndBlock","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Output":"=== RUN TestOpenAIModelTransient_StaleStreakExpires\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Output":"--- PASS: TestOpenAIModelTransient_StaleStreakExpires (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StaleStreakExpires","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Output":"=== RUN TestOpenAIModelTransient_StreakSurvivesSparseTraffic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Output":"--- PASS: TestOpenAIModelTransient_StreakSurvivesSparseTraffic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StreakSurvivesSparseTraffic","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Output":"=== RUN TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Output":"--- PASS: TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_SuccessResetsStreakAcrossSparseTraffic","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Output":"=== RUN TestOpenAIModelTransient_IgnoresInvalidKeys\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Output":"--- PASS: TestOpenAIModelTransient_IgnoresInvalidKeys (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresInvalidKeys","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Output":"=== RUN TestOpenAIModelTransient_IgnoresOversizedModelKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Output":"--- PASS: TestOpenAIModelTransient_IgnoresOversizedModelKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_IgnoresOversizedModelKey","Elapsed":0} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe"} {"Time":"2026-09-12T11:38:28.9700009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Output":"=== RUN TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Output":"--- PASS: TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelTransient_StateIsBoundedAndConcurrencySafe","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"=== RUN TestHandleOpenAITransientError_BlocksOnlyRequestedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5105 status_code=502\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5105 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5105 status_code=502\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5105 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Output":"--- PASS: TestHandleOpenAITransientError_BlocksOnlyRequestedModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_BlocksOnlyRequestedModel","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5600 status_code=500\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5600 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5600 status_code=500\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5600 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Internal_Server_Error","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5602 status_code=502\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5602 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5602 status_code=502\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5602 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Bad_Gateway","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5603 status_code=503\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5603 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5603 status_code=503\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5603 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Service_Unavailable","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5604 status_code=504\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5604 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5604 status_code=504\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5604 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/Gateway_Timeout","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5620 status_code=520\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5620 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5620 status_code=520\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5620 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#00","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5621 status_code=521\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5621 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5621 status_code=521\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5621 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#01","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5622 status_code=522\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5622 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5622 status_code=522\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5622 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#02","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5623 status_code=523\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5623 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5623 status_code=523\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5623 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#03","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"=== RUN TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5624 status_code=524\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5624 model=gpt-5.5 failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5624 status_code=524\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5624 model=gpt-5.5 failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope/#04","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Output":"--- PASS: TestHandleOpenAITransientError_TransientStatusesUseModelScope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_TransientStatusesUseModelScope","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Output":"=== RUN TestHandleOpenAITransientError_529RemainsOverloadOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Output":"--- PASS: TestHandleOpenAITransientError_529RemainsOverloadOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_529RemainsOverloadOnly","Elapsed":0} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"=== RUN TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5107 status_code=502\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5107 model=upstream-a failure_streak=1 cooldown_ms=0 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN account_upstream_error account_id=5107 status_code=502\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"2026/09/12 03:38:28 WARN openai_model_transient_state account_id=5107 model=upstream-a failure_streak=2 cooldown_ms=10000 block_scope=account_model\n"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Output":"--- PASS: TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9705101+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_CanonicalModelIsNotMappedTwice","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Output":"=== RUN TestHandleOpenAITransientError_DoesNotBlockParameter400\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Output":"--- PASS: TestHandleOpenAITransientError_DoesNotBlockParameter400 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_DoesNotBlockParameter400","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Output":"=== RUN TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Output":"--- PASS: TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestHandleOpenAITransientError_HardDisableStillBlocksWholeAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactPrefersSupportedOverUnknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRejectsExplicitlyUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/legacy_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe/advanced_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionIgnoresLegacyCompactProbe","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/legacy_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff/advanced_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionAllowsForceOff","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/legacy_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability/advanced_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NativeCompactionRequiresResponsesCapability","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/legacy_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility/advanced_scheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LegacyCompactionKeepsCompactEligibility","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactRequiresResponsesCapability","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactSkipsChatOnlyAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactFallsBackToUnknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9710202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_CompactAllowsGrok","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Output":"=== RUN TestOpenAICompactSupportTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Output":"=== RUN TestOpenAICompactSupportTier/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Output":"--- PASS: TestOpenAICompactSupportTier/nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/nil","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai","Output":"=== RUN TestOpenAICompactSupportTier/non_openai\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai","Output":"--- PASS: TestOpenAICompactSupportTier/non_openai (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/non_openai","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Output":"=== RUN TestOpenAICompactSupportTier/grok\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Output":"--- PASS: TestOpenAICompactSupportTier/grok (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/grok","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown","Output":"=== RUN TestOpenAICompactSupportTier/openai_unknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown","Output":"--- PASS: TestOpenAICompactSupportTier/openai_unknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported","Output":"=== RUN TestOpenAICompactSupportTier/openai_supported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported","Output":"--- PASS: TestOpenAICompactSupportTier/openai_supported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_supported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported","Output":"=== RUN TestOpenAICompactSupportTier/openai_unsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported","Output":"--- PASS: TestOpenAICompactSupportTier/openai_unsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/openai_unsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on","Output":"=== RUN TestOpenAICompactSupportTier/force_on\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on","Output":"--- PASS: TestOpenAICompactSupportTier/force_on (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_on","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true","Output":"=== RUN TestOpenAICompactSupportTier/force_off_overrides_probe_true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true","Output":"--- PASS: TestOpenAICompactSupportTier/force_off_overrides_probe_true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier/force_off_overrides_probe_true","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Output":"--- PASS: TestOpenAICompactSupportTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSupportTier","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightPrefersSoonestReset","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightZeroNoEffect","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_ResetWeightIgnoresNilWindow","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryUsedPercent","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryMissingIsNeutral","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_PrimaryResetExpiredIsNeutral","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Output":"=== RUN TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Output":"--- PASS: TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaHeadroomFactor_SecondaryLowHeadroomDiscountsPrimary","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomPrefersHigher7dRemaining","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Output":"=== RUN TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Output":"--- PASS: TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlan_QuotaHeadroomZeroNoEffect","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_DBOverridesConfig","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/invalid_single_value","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/base_sum_overflow","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow","Output":"=== RUN TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig/sticky_total_sum_overflow","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAdvancedSchedulerRuntimeSettings_InvalidWeightSumsFallBackToConfig","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabledUsesLegacyLoadAwareness","Elapsed":0} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9715296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_LoadBatchReportsFilterReasons","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_SkipsHTTPOnlyAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_RequiredWSV2_NoAvailableAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_EmbeddingsSkipsChatOnlyAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForTokenCount_DoesNotAcquireGenerationSlot","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/生图意图仅选中支持_responses_的账号","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/仅有不支持_responses_的账号时生图意图无可用账号","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey/非生图路径仍可选中不支持_responses_的账号","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ResponsesCapabilityExcludesUnsupportedAPIKey","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_AlphaSearchAllowsAPIKeyAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DefaultDisabled_AllowsGrokChatAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_skips_higher_priority_ineligible_account","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/media_generation_fails_closed_when_all_accounts_are_ineligible","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts/chat_remains_routable_on_media-ineligible_account","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_GrokMediaCapabilityFiltersIneligibleAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsQuotaAutoPauseExclusion","Elapsed":0} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9720396+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsModelNotSupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorAggregatesReasonsDeterministically","Elapsed":0} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_NoAvailableErrorReportsEmptyPool","Elapsed":0} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_EnabledUsesAdvancedPreviousResponseRouting","Elapsed":0} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedSessionInTopKUsesStickyFirst","Elapsed":0} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9725576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedPreviousRequiresMovableContext","Elapsed":0} {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding"} {"Time":"2026-09-12T11:38:28.9730709+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseCompactUnsupportedDeletesBinding","Elapsed":0} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_Enabled_EmbeddingsSkipsChatOnlyStickyBindings","Elapsed":0} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp"} {"Time":"2026-09-12T11:38:28.973598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp","Output":"=== RUN TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics_DisabledNoOp","Elapsed":0} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SkipsQuarantinedSharedProxy","Elapsed":0} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_FailsOpenWhenAllProxiesQuarantined","Elapsed":0} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyRateLimitedAccountFallsBackToFreshCandidate","Elapsed":0} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold"} {"Time":"2026-09-12T11:38:28.9741222+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy5hThreshold","Elapsed":0} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AllowsBelow5hThreshold","Elapsed":0} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_AutoPauseBy7dThreshold","Elapsed":0} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UnconfiguredThresholdKeepsLegacyBehavior","Elapsed":0} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.97465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_UsesGlobalDefaultThreshold","Elapsed":0} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerAccountDisableOverridesGlobalDefault","Elapsed":0} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_PerWindowDisableScoped","Elapsed":0} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageWindowResetSkipsPause","Elapsed":0} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshUsageWindowStillPauses","Elapsed":0} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994"} {"Time":"2026-09-12T11:38:28.9751722+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_StaleUsageSnapshotSkipsPause_Issue2994","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_FreshExhaustedSnapshotStillPauses_Issue2994","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_SkipsFreshlyRateLimitedSnapshotCandidate","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_ModelRateLimitOnlySkipsThatModel","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyDBRuntimeRecheckSkipsStaleCachedAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountForModelWithExclusions_DBRuntimeRecheckSkipsStaleCachedCandidate","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_DBFreshGroupRecheckReleasesMovedAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9756792+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithLoadAwareness_DBFreshGroupRecheckWaitsOnValidAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool","Output":"=== RUN TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool","Output":"--- PASS: TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RecheckSelectedOpenAIAccountFromDB_SimpleModeUsesFullPool","Elapsed":0} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_PreviousResponseSticky","Elapsed":0} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky"} {"Time":"2026-09-12T11:38:28.9762021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyKeepsSticky","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Output":"2026/09/12 03:38:28 INFO sticky_escape_triggered account_id=21101 reason=ttft error_rate=0 ttft=17439.488\n"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByTTFT","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Output":"2026/09/12 03:38:28 INFO sticky_escape_triggered account_id=21201 reason=error_rate error_rate=0.67232 ttft=0\n"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeByErrorRate","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Output":"2026/09/12 03:38:28 INFO sticky_escape_triggered account_id=21301 reason=concurrency_full error_rate=0 ttft=0\n"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyBusyEscapes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionStickyEscapeDisabledKeepsLegacyBehavior","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityChoosesSubscriptionPoolFirst","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityFallsBackWhenSubscriptionFull","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityDisabledUsesScore","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_UsesAccountPriorityWithinGroupPool","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Output":"=== RUN TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Output":"--- PASS: TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountScheduler_SkipsAccountBlockedForRequestedModel","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Output":"=== RUN TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Output":"--- PASS: TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReportOpenAIAccountScheduleResult_SuccessClearsModelTransientState","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary","Output":"=== RUN TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary","Output":"--- PASS: TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ShouldEscapeStickyAccount_ThresholdBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SessionSticky_ForceHTTP","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_SkipsStickyHTTPAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_ClearsStickyAccountOutsideGroup","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_RequiredWSV2_NoAvailableAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback"} {"Time":"2026-09-12T11:38:28.9767113+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKFallback","Elapsed":0} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceTopKExcludesQuotaPaused","Elapsed":0} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Output":"=== RUN TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Output":"--- PASS: TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIAccountSchedulerMetrics","Elapsed":0} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Output":"=== RUN TestOpenAIAccountRuntimeStats_ReportAndSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Output":"--- PASS: TestOpenAIAccountRuntimeStats_ReportAndSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportAndSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent"} {"Time":"2026-09-12T11:38:28.9772233+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Output":"=== RUN TestOpenAIAccountRuntimeStats_ReportConcurrent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Output":"--- PASS: TestOpenAIAccountRuntimeStats_ReportConcurrent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountRuntimeStats_ReportConcurrent","Elapsed":0} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Output":"=== RUN TestSelectTopKOpenAICandidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Output":"--- PASS: TestSelectTopKOpenAICandidates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectTopKOpenAICandidates","Elapsed":0} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Output":"=== RUN TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Output":"--- PASS: TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_DeterministicBySessionSeed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions"} {"Time":"2026-09-12T11:38:28.9782603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_LoadBalanceDistributesAcrossSessions","Elapsed":0} {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy"} {"Time":"2026-09-12T11:38:28.9787734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Output":"=== RUN TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Output":"--- PASS: TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAISelectionSeed_NoAffinityAddsEntropy","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Output":"=== RUN TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Output":"--- PASS: TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWeightedSelectionOrder_HandlesInvalidScores","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Output":"=== RUN TestOpenAISelectionRNG_SeedZeroStillWorks\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Output":"--- PASS: TestOpenAISelectionRNG_SeedZeroStillWorks (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectionRNG_SeedZeroStillWorks","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Output":"=== RUN TestOpenAIAccountCandidateHeap_PushPopAndInvalidType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Output":"--- PASS: TestOpenAIAccountCandidateHeap_PushPopAndInvalidType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAccountCandidateHeap_PushPopAndInvalidType","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Output":"=== RUN TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Output":"--- PASS: TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_ReportSwitchAndSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Output":"=== RUN TestOpenAIGatewayService_SchedulerWrappersAndDefaults\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Output":"--- PASS: TestOpenAIGatewayService_SchedulerWrappersAndDefaults (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SchedulerWrappersAndDefaults","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches","Output":"=== RUN TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches","Output":"--- PASS: TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultOpenAIAccountScheduler_IsAccountTransportCompatible_Branches","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_StickyWeightedFallbackSkipsOutOfGroupStickyAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable","Output":"=== RUN TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountWithScheduler_SubscriptionPriorityWaitsOnBusySubscriptionWhenRegularUnusable","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Output":"=== RUN TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Output":"--- PASS: TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICostOverflowExpandedOnlyWhenCostAddsCandidates","Elapsed":0} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime"} {"Time":"2026-09-12T11:38:28.9803563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateRecomputesPeakAtSelectionTime","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Output":"=== RUN TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Output":"--- PASS: TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsSparseProbeIsNeutral","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Output":"=== RUN TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Output":"--- PASS: TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsCoverageShrinksSparseSignal","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Output":"=== RUN TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Output":"--- PASS: TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamCostFactorsUseMedianAgainstOutlier","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Output":"=== RUN TestOpenAILegacyUpstreamRateOrderRequiresComparableRates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Output":"--- PASS: TestOpenAILegacyUpstreamRateOrderRequiresComparableRates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderRequiresComparableRates","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Output":"=== RUN TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Output":"--- PASS: TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAILegacyUpstreamRateOrderIgnoresNonOpenAIPlatforms","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Output":"=== RUN TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Output":"--- PASS: TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISchedulingRatePlacesOAuthAtConfiguredReference","Elapsed":0} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference"} {"Time":"2026-09-12T11:38:28.9809032+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityUsesConfiguredOAuthReference","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Output":"=== RUN TestOpenAIModelsSelectionIgnoresTokenCostSignal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Output":"--- PASS: TestOpenAIModelsSelectionIgnoresTokenCostSignal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsSelectionIgnoresTokenCostSignal","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/switch_off_keeps_priority_first","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_batch_disabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler/load_lookup_failure","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePriorityIsIndependentFromAdvancedScheduler","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Output":"=== RUN TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Output":"--- PASS: TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceAdvancedSchedulerIgnoresLegacyLowRateSwitch","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Output":"=== RUN TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Output":"--- PASS: TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceLegacyLowRatePrioritySkipsCooledDownAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/fresh","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/zero_rate","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/transient_failure_with_fresh_cache","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/stale","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/future","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Output":"=== RUN TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly/unsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Output":"--- PASS: TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFreshUpstreamBillingRateUsesFreshCachedSuccessOnly","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Output":"=== RUN TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Output":"--- PASS: TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAISelectionOrderIncludesOverflowOnlyForCostScheduling","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Output":"=== RUN TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Output":"--- PASS: TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountLoadPlanUsesCostOnlyForTokenScope","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Output":"=== RUN TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Output":"--- PASS: TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUpstreamCostIsExactNoOpWithoutSignal","Elapsed":0} {"Time":"2026-09-12T11:38:28.9814156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal"} {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Output":"=== RUN TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Output":"--- PASS: TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIAccountSchedulerScoreSnapshotUsesUpstreamCostSignal","Elapsed":0} {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion"} {"Time":"2026-09-12T11:38:28.9819251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Output":"=== RUN TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Output":"--- PASS: TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityUsesFreshAssertion","Elapsed":0} {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce"} {"Time":"2026-09-12T11:38:28.982436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Output":"=== RUN TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Output":"--- PASS: TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountTestServiceOpenAICompactAgentIdentityRecoversInvalidTaskOnce","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Output":"=== RUN TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Output":"--- PASS: TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityPassthroughKeepsSessionAndPromptCacheHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Output":"=== RUN TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Output":"--- PASS: TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityErrorRedactionDoesNotLeakCredentialValues","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/oauth","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/personal_access_token","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key","Output":"=== RUN TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes/api_key","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Output":"--- PASS: TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAuthenticationHeadersPreserveOAuthPATAndAPIKeyBearerModes","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Output":"=== RUN TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Output":"--- PASS: TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSAgentIdentityRecoveryRequiresTaskInvalidBody","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Output":"=== RUN TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed","Output":"=== RUN TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed","Output":"--- PASS: TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_Agent_Identity_When_a_WS_path_receives_no_bearer_token_Then_dial-time_assertion_auth_is_allowed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected","Output":"=== RUN TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected","Output":"--- PASS: TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken/Given_bearer_credentials_When_a_WS_path_receives_no_token_Then_the_request_is_rejected","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Output":"--- PASS: TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIWSBearerTokenAllowsAgentIdentityWithoutStoredToken","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Output":"=== RUN TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Output":"--- PASS: TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolHeadersFactoryRunsAtDialAndStalePrewarmIsDiscarded","Elapsed":0} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce"} {"Time":"2026-09-12T11:38:28.9840286+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Output":"=== RUN TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Output":"2026/09/12 03:38:28 [OpenAI 自动透传] 命中自动透传分支: account=23 name=agent-identity type=oauth model=gpt-5.4 stream=true\n"} {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Output":"--- PASS: TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9855947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityTaskInvalidRetriesExactlyOnce","Elapsed":0} {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce"} {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Output":"=== RUN TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions"} {"Time":"2026-09-12T11:38:28.986107+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions","Output":"=== RUN TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions","Output":"--- PASS: TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/chat_completions","Elapsed":0} {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages"} {"Time":"2026-09-12T11:38:28.9866201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages","Output":"=== RUN TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages","Output":"--- PASS: TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce/anthropic_messages","Elapsed":0} {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Output":"--- PASS: TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityCompatRoutesRecoverInvalidTaskOnce","Elapsed":0} {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable"} {"Time":"2026-09-12T11:38:28.9876617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Output":"=== RUN TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Output":"--- PASS: TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAgentIdentityChatRecoveryKeepsAutoDerivedSessionIsolationStable","Elapsed":0} {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature"} {"Time":"2026-09-12T11:38:28.9881771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Output":"=== RUN TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Output":"--- PASS: TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildAgentAssertionMatchesCodexEnvelopeAndSignature","Elapsed":0} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Output":"=== RUN TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Output":"--- PASS: TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecryptAgentTaskIDSupportsCodexSealedBoxResponse","Elapsed":0} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Output":"=== RUN TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Output":"--- PASS: TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldApplyOpenAIAlphaSearchAccountErrorSideEffects","Elapsed":0} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Output":"=== RUN TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Output":"--- PASS: TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAlphaSearchSchedulingModelUsesCanonicalAccountMapping","Elapsed":0} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Output":"=== RUN TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Output":"--- PASS: TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIAlphaSearchBody_RemovesResponsesOnlyFields","Elapsed":0} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Output":"=== RUN TestIsOpenAIAlphaSearchEndpointUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9886947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Output":"--- PASS: TestIsOpenAIAlphaSearchEndpointUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIAlphaSearchEndpointUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/account_attributed_502","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/request_scoped_capacity","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/provider_scoped_overload","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/dedicated_same_account_retry","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/credential_disable_path","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request","Output":"=== RUN TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions/client_request","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Output":"--- PASS: TestClassifyOpenAIAPIKeyHealthFailureExclusions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIAPIKeyHealthFailureExclusions","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Output":"=== RUN TestOpenAIAPIKeyHealthBreakerDefaultDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Output":"--- PASS: TestOpenAIAPIKeyHealthBreakerDefaultDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerDefaultDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Output":"=== RUN TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Output":"--- PASS: TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthBreakerTripsPersistedAndRuntimeState","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Output":"=== RUN TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Output":"--- PASS: TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAPIKeyHealthSuccessDoesNotTouchSettingsOrCache","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"2026/09/12 03:38:28 probe_done: account_id=96 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportUsesCodexProbeHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_adaptive_supports_responses","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/deepseek_chat_clears_forced_responses","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_adaptive_supports_responses","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/kimi_responses_protocol_supports_responses","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders/zhipu_adaptive_falls_back_to_chat","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupportCNProviders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupportCNProviders","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Output":"2026/09/12 03:38:28 probe_inconclusive_keep_unknown: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 response_status=incomplete reason=max_output_tokens\n"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/incomplete_max_output_tokens","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Output":"2026/09/12 03:38:28 probe_inconclusive_keep_unknown: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 response_status=failed reason=\n"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown/failed_status_on_http_200","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_InconclusiveResponseKeepsUnknown","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_with_function_call","Elapsed":0} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only"} {"Time":"2026-09-12T11:38:28.9892056+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"2026/09/12 03:38:28 WARN openai_responses_probe_marked_unsupported account_id=4200 account_name=compat-upstream base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 upstream_status=200\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=false\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/completed_reasoning_only","Elapsed":0} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"2026/09/12 03:38:28 WARN openai_responses_probe_marked_unsupported account_id=4200 account_name=compat-upstream base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 upstream_status=200\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=false\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/incomplete_other_reason","Elapsed":0} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=200 supported=true\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/no_status_field","Elapsed":0} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"2026/09/12 03:38:28 WARN openai_responses_probe_marked_unsupported account_id=4200 account_name=compat-upstream base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 upstream_status=404\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=404 supported=false\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/endpoint_absent_404","Elapsed":0} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Output":"=== RUN TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Output":"2026/09/12 03:38:28 probe_done: account_id=4200 base_url=https://compat-upstream.example/v1 probe_model=gpt-5.4 status=500 supported=true\n"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist/server_error_stays_conservative_true","Elapsed":0} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Output":"--- PASS: TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProbeOpenAIAPIKeyResponsesSupport_ConclusiveResponsesStillPersist","Elapsed":0} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough"} {"Time":"2026-09-12T11:38:28.9897248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Output":"=== RUN TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Output":"--- PASS: TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeRejectionPassesThrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry"} {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Output":"=== RUN TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9907509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Output":"2026/09/12 03:38:28 [OpenAI] Retrying non-WSv2 request after indexed status parameter rejection (account: openai-oauth-namespace)\n"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Output":"--- PASS: TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthAstraProModeKeptAcrossRejectedFieldRetry","Elapsed":0} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Output":"=== RUN TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Output":"--- PASS: TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPCapacityShedIsRequestScopedForOAuthAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Output":"=== RUN TestOpenAIStreamErrorFrameDoesNotStartClientOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Output":"--- PASS: TestOpenAIStreamErrorFrameDoesNotStartClientOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamErrorFrameDoesNotStartClientOutput","Elapsed":0} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Output":"=== RUN TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native"} {"Time":"2026-09-12T11:38:28.9912621+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Output":"=== RUN TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Output":"--- PASS: TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/native","Elapsed":0} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Output":"=== RUN TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Output":"--- PASS: TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Output":"--- PASS: TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamMetadataPreambleAndMessageOnlyOverloadFailOver","Elapsed":0} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Output":"=== RUN TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Output":"--- PASS: TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedErrorFramePrecedingFailedStillFailsOver","Elapsed":0} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Output":"=== RUN TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9917767+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:28.991Z\",\"msg\":\"gateway.failover_suppressed_after_semantic_output\",\"service\":\"sub2api\",\"env\":\"test\",\"path\":\"native_sse\",\"event_type\":\"error\",\"upstream_request_id\":\"rid-shed-after-output\",\"account_id\":1,\"platform\":\"openai\"}\n"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Output":"--- PASS: TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamCapacityShedAfterOutputRewritesCodeForClient","Elapsed":0} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Output":"=== RUN TestOpenAIStreamProcessingFailureAfterOutputIsRecorded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Output":"=== RUN TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Output":"--- PASS: TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/native","Elapsed":0} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Output":"=== RUN TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Output":"--- PASS: TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Output":"--- PASS: TestOpenAIStreamProcessingFailureAfterOutputIsRecorded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamProcessingFailureAfterOutputIsRecorded","Elapsed":0} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件嵌套code改写","Elapsed":0} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写"} {"Time":"2026-09-12T11:38:28.9922885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧裸code改写","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/failed事件只有过载文案时补充code","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/error帧只有过载文案时补充code","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/rate_limit不改写","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/普通server_error不改写","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Output":"=== RUN TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient/非JSON不改写","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Output":"--- PASS: TestSanitizeOpenAICapacityShedErrorCodeForClient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICapacityShedErrorCodeForClient","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Output":"=== RUN TestCodexOutboundVersionHasSingleSource\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Output":"--- PASS: TestCodexOutboundVersionHasSingleSource (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexOutboundVersionHasSingleSource","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Output":"=== RUN TestResolveAndSetOpenAIChatGPTAccountHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org","Output":"=== RUN TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org","Output":"--- PASS: TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/shadow_resolves_to_parent_org","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough","Output":"=== RUN TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough","Output":"--- PASS: TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders/normal_account_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Output":"--- PASS: TestResolveAndSetOpenAIChatGPTAccountHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveAndSetOpenAIChatGPTAccountHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Output":"=== RUN TestDetectCodexClientRestriction_NilSettingServiceFailsClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Output":"--- PASS: TestDetectCodexClientRestriction_NilSettingServiceFailsClosed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectCodexClientRestriction_NilSettingServiceFailsClosed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/未开启开关时绕过","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_cli_rs_命中","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_vscode_命中","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_codex_app_命中","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后_originator_命中","Elapsed":0} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9928014+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启后非官方客户端拒绝","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect/开启_ForceCodexCLI_时允许通过","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未配置白名单时_Claude_Code_签名仍拒绝","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/未开启_codex_cli_only_时直接绕过","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_签名_→_放行(whitelist)","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局白名单含_Claude_Code_+_非签名_→_403","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Output":"=== RUN TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients/全局列表为空_+_账号未配_→_403","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Output":"--- PASS: TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexClientRestrictionDetector_Detect_AllowedClients","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Output":"=== RUN TestCodexClientRestrictionMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Output":"=== RUN TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Output":"--- PASS: TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太低:带实际版本与最低要求","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Output":"=== RUN TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Output":"--- PASS: TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/版本太高:带实际版本与最高允许","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Output":"=== RUN TestCodexClientRestrictionMessage/无法识别版本:保持原通用句\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Output":"--- PASS: TestCodexClientRestrictionMessage/无法识别版本:保持原通用句 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/无法识别版本:保持原通用句","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Output":"=== RUN TestCodexClientRestrictionMessage/未命中官方:保持原通用句\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Output":"--- PASS: TestCodexClientRestrictionMessage/未命中官方:保持原通用句 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage/未命中官方:保持原通用句","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Output":"--- PASS: TestCodexClientRestrictionMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexClientRestrictionMessage","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Output":"=== RUN TestOpenAIClientTransport_SetAndGet\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Output":"--- PASS: TestOpenAIClientTransport_SetAndGet (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_SetAndGet","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/type_value_ws","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/http_sse_alias","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/sse_alias","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/websocket_alias","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_string","Elapsed":0} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type"} {"Time":"2026-09-12T11:38:28.9933096+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type","Output":"=== RUN TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue/invalid_type","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Output":"--- PASS: TestOpenAIClientTransport_GetNormalizesRawContextValue (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_GetNormalizesRawContextValue","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Output":"=== RUN TestOpenAIClientTransport_NilAndUnknownInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Output":"--- PASS: TestOpenAIClientTransport_NilAndUnknownInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIClientTransport_NilAndUnknownInput","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Output":"=== RUN TestResolveOpenAIWSDecisionByClientTransport\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Output":"--- PASS: TestResolveOpenAIWSDecisionByClientTransport (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSDecisionByClientTransport","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Output":"=== RUN TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Output":"--- PASS: TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexRequestBodyIdentityNamespaceIsStablePerOAuthAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Output":"=== RUN TestCodexAccountIdentityNamespaceUsesStableCredentialSource\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Output":"--- PASS: TestCodexAccountIdentityNamespaceUsesStableCredentialSource (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentityNamespaceUsesStableCredentialSource","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"=== RUN TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":111,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Output":"--- PASS: TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAccountIdentitySourceResolvesShadowAndOverwritesFailoverContext","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"=== RUN TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":11,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":11,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":19,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Output":"--- PASS: TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersNamespacesCodexIdentityByOAuthAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"=== RUN TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.993Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":19,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Output":"--- PASS: TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestNamespacesCodexIdentityByOAuthAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== RUN TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"=== RUN TestGetCodexFingerprintMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"=== RUN TestGetCodexFingerprintMode/nil_账号\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"--- PASS: TestGetCodexFingerprintMode/nil_账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"=== RUN TestGetCodexFingerprintMode/非_OAuth_账号\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"--- PASS: TestGetCodexFingerprintMode/非_OAuth_账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/OpenAI_setup_token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/OpenAI_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/Anthropic_setup_token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/Anthropic_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"=== RUN TestGetCodexFingerprintMode/无_extra_默认_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/无_extra_默认_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/空值默认_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/空值默认_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/非法值默认_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/非法值默认_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"=== RUN TestGetCodexFingerprintMode/显式_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"--- PASS: TestGetCodexFingerprintMode/显式_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"=== RUN TestGetCodexFingerprintMode/device\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"--- PASS: TestGetCodexFingerprintMode/device (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"=== RUN TestGetCodexFingerprintMode/session\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"--- PASS: TestGetCodexFingerprintMode/session (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"=== RUN TestGetCodexFingerprintMode/full\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"--- PASS: TestGetCodexFingerprintMode/full (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"--- PASS: TestGetCodexFingerprintMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOff\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Elapsed":0} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9938196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_OffMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_OffMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_DeviceMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_DeviceMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_FullMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_FullMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_OffMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_OffMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_DeviceMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_DeviceMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_SessionMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_SessionMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_FullMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_FullMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Elapsed":0} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9943237+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_Noop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_Noop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"=== RUN TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"--- PASS: TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.994891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Output":"=== RUN TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":2001,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Output":"--- PASS: TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_AppliesStagedFingerprint","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Output":"=== RUN TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:28.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":2002,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Output":"--- PASS: TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamRequestOpenAIPassthrough_OffModeKeepsIsolatedSession","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Output":"=== RUN TestEnsureCodexIdentityHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Output":"=== RUN TestEnsureCodexIdentityHeaders/补齐缺失身份头\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Output":"--- PASS: TestEnsureCodexIdentityHeaders/补齐缺失身份头 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/补齐缺失身份头","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Output":"=== RUN TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Output":"--- PASS: TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders/官方非_CLI_客户端身份同样被统一","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Output":"--- PASS: TestEnsureCodexIdentityHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexIdentityHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Output":"=== RUN TestEnforceCodexIdentityHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/TUI_身份\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/TUI_身份 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/TUI_身份","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Output":"=== RUN TestEnforceCodexIdentityHeaders/错配_originator\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Output":"--- PASS: TestEnforceCodexIdentityHeaders/错配_originator (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/错配_originator","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/官方_vscode_身份\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/官方_vscode_身份 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/官方_vscode_身份","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Output":"=== RUN TestEnforceCodexIdentityHeaders/第三方客户端身份\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Output":"--- PASS: TestEnforceCodexIdentityHeaders/第三方客户端身份 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/第三方客户端身份","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Output":"=== RUN TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Output":"--- PASS: TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/浏览器型_UA(原浏览器兜底已被统一出口吸收)","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Output":"=== RUN TestEnforceCodexIdentityHeaders/UA_缺失\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Output":"--- PASS: TestEnforceCodexIdentityHeaders/UA_缺失 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/UA_缺失","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Output":"=== RUN TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Output":"--- PASS: TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/originator_override_的真实_TUI_客户端","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Output":"=== RUN TestEnforceCodexIdentityHeaders/陈旧客户端版本\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Output":"--- PASS: TestEnforceCodexIdentityHeaders/陈旧客户端版本 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders/陈旧客户端版本","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Output":"--- PASS: TestEnforceCodexIdentityHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/官方形态覆写_UA_保留指纹但重建版本段","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/非官方形态覆写_UA_回退规范身份","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_的版本段被重建","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Output":"=== RUN TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA/陈旧覆写_UA_跟随同步版本","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Output":"--- PASS: TestEnforceCodexIdentityHeadersWithAccountOverrideUA (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersWithAccountOverrideUA","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Output":"=== RUN TestEnforceCodexIdentityHeadersFollowsCanonicalResolver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Output":"--- PASS: TestEnforceCodexIdentityHeadersFollowsCanonicalResolver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersFollowsCanonicalResolver","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Output":"=== RUN TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Output":"--- PASS: TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersRejectsInvalidCanonicalUA","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Output":"=== RUN TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Output":"--- PASS: TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexIdentityEnforcementZeroValueConfigKeepsItEnabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled"} {"Time":"2026-09-12T11:38:28.9954091+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Output":"=== RUN TestEnforceCodexIdentityHeaders_EnforcementDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Output":"--- PASS: TestEnforceCodexIdentityHeaders_EnforcementDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Output":"=== RUN TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Output":"--- PASS: TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_EnforcementDisabledThirdPartyFallback","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Output":"=== RUN TestEnforceCodexIdentityHeadersIsIdempotent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Output":"--- PASS: TestEnforceCodexIdentityHeadersIsIdempotent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeadersIsIdempotent","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Output":"=== RUN TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Output":"--- PASS: TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnforceCodexIdentityHeaders_NoOriginatorIsNoop","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Output":"=== RUN TestNormalizeCodexClientVersion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Output":"--- PASS: TestNormalizeCodexClientVersion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexClientVersion","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Output":"=== RUN TestBuildCodexCLIUserAgent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Output":"--- PASS: TestBuildCodexCLIUserAgent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexCLIUserAgent","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Output":"=== RUN TestCodexCanonicalUserAgentFollowsResolver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Output":"--- PASS: TestCodexCanonicalUserAgentFollowsResolver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFollowsResolver","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Output":"=== RUN TestCodexCanonicalUserAgentFallsBackWithoutResolver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Output":"--- PASS: TestCodexCanonicalUserAgentFallsBackWithoutResolver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexCanonicalUserAgentFallsBackWithoutResolver","Elapsed":0} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback"} {"Time":"2026-09-12T11:38:28.9959598+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/official_fallback","Elapsed":0} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/custom_host_has_no_guessed_capability","Elapsed":0} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/missing_peer_capability","Elapsed":0} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge"} {"Time":"2026-09-12T11:38:28.9964708+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Output":"=== RUN TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9969848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9969848+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations/implemented_chat_bridge","Elapsed":0} {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Output":"--- PASS: TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesUseAccountScopeAndSharedDeclarations","Elapsed":0} {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse"} {"Time":"2026-09-12T11:38:28.9975049+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Output":"=== RUN TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Output":"--- PASS: TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesPreserveLiveNullAndFalse","Elapsed":0} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== RUN TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== PAUSE TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== RUN TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== RUN TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== RUN TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== RUN TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== RUN TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias"} {"Time":"2026-09-12T11:38:28.9985384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Output":"=== RUN TestAstraCodexToolCapabilitiesFollowAPIKeyAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Output":"--- PASS: TestAstraCodexToolCapabilitiesFollowAPIKeyAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesFollowAPIKeyAlias","Elapsed":0} {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard"} {"Time":"2026-09-12T11:38:28.9995572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Output":"=== RUN TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Output":"--- PASS: TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAstraCodexToolCapabilitiesKeepAPIKeyResponsesLiteGuard","Elapsed":0} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/no_routing_rule_still_fails_closed","Elapsed":0} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_resolves_the_alias","Elapsed":0} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed"} {"Time":"2026-09-12T11:38:29.0000676+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_disabled_falls_back_to_failing_closed","Elapsed":0} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Output":"=== RUN TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting/routing_rule_for_another_alias_does_not_leak","Elapsed":0} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Output":"--- PASS: TestCodexAliasFailoverMappingHonorsModelRouting (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexAliasFailoverMappingHonorsModelRouting","Elapsed":0} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== RUN TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== PAUSE TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== RUN TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== PAUSE TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions"} {"Time":"2026-09-12T11:38:29.0005744+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Output":"=== RUN TestBuildCodexModelsManifestUsesGPT6AstraInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Output":"--- PASS: TestBuildCodexModelsManifestUsesGPT6AstraInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesGPT6AstraInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== RUN TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== PAUSE TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== RUN TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== PAUSE TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== RUN TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== PAUSE TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== RUN TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== PAUSE TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== RUN TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== PAUSE TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== RUN TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== PAUSE TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== RUN TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== RUN TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== RUN TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== RUN TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== RUN TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== PAUSE TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== RUN TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== RUN TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== RUN TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== RUN TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== PAUSE TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/nil","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/configuration_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/configuration_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/configuration_error","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/upstream_configuration_error","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/proxy_connection_configuration_error","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/canceled_request\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/canceled_request (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/canceled_request","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/redirect_policy_error","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/deadline_exceeded","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/unexpected_EOF","Elapsed":0} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/closed_connection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0010849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/closed_connection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/closed_connection","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/network_operation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/network_operation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/network_operation","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/DNS_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/DNS_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/DNS_error","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/typed_HTTP2_GOAWAY","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_GOAWAY","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_refused_stream","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Output":"=== RUN TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError/stdlib_HTTP2_connection_error","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Output":"--- PASS: TestIsRetryableCodexModelsManifestTransportError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestTransportError","Elapsed":0} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough"} {"Time":"2026-09-12T11:38:29.0015917+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Output":"=== RUN TestFetchCodexModelsManifestPassthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Output":"--- PASS: TestFetchCodexModelsManifestPassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestPassthrough","Elapsed":0} {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken"} {"Time":"2026-09-12T11:38:29.0021068+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityUsesAssertionWithoutOAuthToken","Elapsed":0} {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce"} {"Time":"2026-09-12T11:38:29.0026159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRecoversInvalidTaskOnce","Elapsed":0} {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors"} {"Time":"2026-09-12T11:38:29.0036357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentityRedactsUpstreamErrors","Elapsed":0} {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion"} {"Time":"2026-09-12T11:38:29.004162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Output":"=== RUN TestFetchCodexModelsManifestDefaultClientVersion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Output":"--- PASS: TestFetchCodexModelsManifestDefaultClientVersion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestDefaultClientVersion","Elapsed":0} {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified"} {"Time":"2026-09-12T11:38:29.0046746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Output":"=== RUN TestFetchCodexModelsManifestNotModified\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Output":"--- PASS: TestFetchCodexModelsManifestNotModified (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestNotModified","Elapsed":0} {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError"} {"Time":"2026-09-12T11:38:29.0051894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Output":"=== RUN TestFetchCodexModelsManifestUpstreamError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Output":"--- PASS: TestFetchCodexModelsManifestUpstreamError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUpstreamError","Elapsed":0} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken"} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Output":"=== RUN TestFetchCodexModelsManifestMissingToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Output":"--- PASS: TestFetchCodexModelsManifestMissingToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestMissingToken","Elapsed":0} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream"} {"Time":"2026-09-12T11:38:29.0056981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCustomUpstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCustomUpstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCustomUpstream","Elapsed":0} {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag"} {"Time":"2026-09-12T11:38:29.0062139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCompleteBodyWithoutUpstreamETagUsesFinalBodyETag","Elapsed":0} {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList"} {"Time":"2026-09-12T11:38:29.0077376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConvertsStandardOpenAIModelList","Elapsed":0} {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors"} {"Time":"2026-09-12T11:38:29.0082543+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestUsesCompleteDescriptors","Elapsed":0} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== RUN TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== PAUSE TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/affected_models_disable_responses_lite_and_preserve_unknown_fields","Elapsed":0} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/unaffected_model_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Output":"=== RUN TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest/false_missing_and_alternate_entries_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Output":"--- PASS: TestAdjustAPIKeyCodexModelsManifest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdjustAPIKeyCodexModelsManifest","Elapsed":0} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDisablesResponsesLiteForAffectedModels","Elapsed":0} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite"} {"Time":"2026-09-12T11:38:29.0087812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Output":"=== RUN TestFetchCodexModelsManifestOAuthPreservesResponsesLite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Output":"--- PASS: TestFetchCodexModelsManifestOAuthPreservesResponsesLite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthPreservesResponsesLite","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== RUN TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== PAUSE TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/codex_manifest_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/empty_data_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/data_not_an_array_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/entries_without_usable_IDs_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/invalid_JSON_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Output":"=== RUN TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged/non-object_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Output":"--- PASS: TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCodexManifestLeavesUnsupportedBodiesUnchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Output":"=== RUN TestFetchCodexModelsManifestUsesConfiguredBodyLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Output":"--- PASS: TestFetchCodexModelsManifestUsesConfiguredBodyLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestUsesConfiguredBodyLimit","Elapsed":0} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary"} {"Time":"2026-09-12T11:38:29.0098688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Output":"=== RUN TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Output":"--- PASS: TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAcceptsConfiguredLimitAboveLegacyBoundary","Elapsed":0.06} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/OpenAI_models_list","Elapsed":0} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/invalid_JSON","Elapsed":0} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/non-object","Elapsed":0} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/null_object","Elapsed":0} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/missing_models","Elapsed":0} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_object","Elapsed":0} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null"} {"Time":"2026-09-12T11:38:29.0664904+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Output":"=== RUN TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope/models_null","Elapsed":0} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Output":"--- PASS: TestFetchCodexModelsManifestRejectsInvalidEnvelope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestRejectsInvalidEnvelope","Elapsed":0} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheInvalidEnvelope","Elapsed":0} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation"} {"Time":"2026-09-12T11:38:29.0670124+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Output":"=== RUN TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeySharedRefreshSurvivesCallerCancellation","Elapsed":0.05} {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh"} {"Time":"2026-09-12T11:38:29.1174432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyConcurrentRequestsShareRefresh","Elapsed":0.05} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally"} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyFreshCacheHandlesETagLocally","Elapsed":0} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation"} {"Time":"2026-09-12T11:38:29.1679622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheSurvivesClientMutation","Elapsed":0} {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity"} {"Time":"2026-09-12T11:38:29.1711645+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheKeyIsolatesRequestIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize"} {"Time":"2026-09-12T11:38:29.1716761+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyCacheBoundsEntriesAndBodySize","Elapsed":0.02} {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing"} {"Time":"2026-09-12T11:38:29.1952232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyServesStaleWhileRefreshing","Elapsed":0.01} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRevalidatesStaleETag","Elapsed":0} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyColdCacheHandlesNotModifiedLocally","Elapsed":0} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyDoesNotCacheUnexpectedColdNotModified","Elapsed":0} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyPreservesBaseURLQuery","Elapsed":0} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyRejectsBaseURLFragment","Elapsed":0} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable"} {"Time":"2026-09-12T11:38:29.205691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Output":"=== RUN TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Output":"--- PASS: TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401MarksAccountUnschedulable","Elapsed":0} {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount"} {"Time":"2026-09-12T11:38:29.2067158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"=== RUN TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.207Z\",\"logger\":\"slog\",\"msg\":\"account_disabled_auth_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"error\":\"Token revoked (401): token has been revoked\"}\n"} {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Output":"--- PASS: TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuth401TokenRevokedDisablesAccount","Elapsed":0} {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount"} {"Time":"2026-09-12T11:38:29.2072285+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Output":"=== RUN TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Output":"--- PASS: TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAgentIdentity401DoesNotDisableAccount","Elapsed":0} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Output":"=== RUN TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Output":"--- PASS: TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKey401KeepsNoFailoverAndNoDisable","Elapsed":0} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUpstreamError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUpstreamError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUpstreamError","Elapsed":0} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL"} {"Time":"2026-09-12T11:38:29.2077394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/missing_base_URL","Elapsed":0} {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host"} {"Time":"2026-09-12T11:38:29.2082493+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_host","Elapsed":0} {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL"} {"Time":"2026-09-12T11:38:29.208759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Output":"=== RUN TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint/official_versioned_URL","Elapsed":0} {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Output":"--- PASS: TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestAPIKeyUsesOfficialOpenAIModelsEndpoint","Elapsed":0} {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests"} {"Time":"2026-09-12T11:38:29.2097738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Output":"=== RUN TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Output":"--- PASS: TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthFreshWindowZeroUpstreamRequests","Elapsed":0} {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground"} {"Time":"2026-09-12T11:38:29.2102833+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Output":"=== RUN TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Output":"--- PASS: TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthStaleServesOldValueAndRefreshesInBackground","Elapsed":0} {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure"} {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches"} {"Time":"2026-09-12T11:38:29.2114283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_refresh_waits_and_re-caches","Elapsed":0} {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache"} {"Time":"2026-09-12T11:38:29.2119393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Output":"=== RUN TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/repository"} {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"} {"Time":"2026-09-12T11:38:29.2124524+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin"} {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure/overdue_upstream_failure_returns_error_not_stale_cache","Elapsed":0} {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Output":"--- PASS: TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthOverdueSynchronousRefreshAndFailure","Elapsed":0} {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss"} {"Time":"2026-09-12T11:38:29.2129659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Output":"=== RUN TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Output":"--- PASS: TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthTokenChangeCacheMiss","Elapsed":0} {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering"} {"Time":"2026-09-12T11:38:29.2134771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Output":"=== RUN TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Output":"--- PASS: TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchCodexModelsManifestOAuthSharedAcrossGroupsWithIndependentFiltering","Elapsed":0} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Output":"=== RUN TestOpenAIOAuthService_ValidateCodexPersonalAccessToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Output":"--- PASS: TestOpenAIOAuthService_ValidateCodexPersonalAccessToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessToken","Elapsed":0} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Output":"=== RUN TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Output":"--- PASS: TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ValidateCodexPersonalAccessTokenRequiresATPrefix","Elapsed":0} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT"} {"Time":"2026-09-12T11:38:29.2139921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Output":"=== RUN TestOpenAIOAuthService_BuildAccountCredentialsForPAT\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Output":"--- PASS: TestOpenAIOAuthService_BuildAccountCredentialsForPAT (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_BuildAccountCredentialsForPAT","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Output":"=== RUN TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Output":"--- PASS: TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPersonalAccessTokenCredentialsRemovesOAuthFields","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_RewritesDeclarationsAndReferences","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_CollisionDoesNotMutate","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Output":"=== RUN TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ReservedPythonNameIsOAuthOnly","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Output":"=== RUN TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Output":"--- PASS: TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromContext_HTTPAndWSPayloadShapes","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_SessionUpdateOnlyTouchesFunctionProtocolNodes","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Output":"=== RUN TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_OnlyTouchesResponseToolCallNodesAndPreservesNumbers","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_http","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/chat_sse","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Output":"=== RUN TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols/messages_tool_use","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Output":"--- PASS: TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesInJSON_ExplicitHTTPAndSSEToolCallProtocols","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Output":"=== RUN TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Output":"--- PASS: TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAliasOpenAIOAuthReservedToolNames_PromptCompatibilityRunsFirst","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Output":"=== RUN TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Output":"--- PASS: TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexToolNameReverse_WSSessionReplacementDoesNotChangeActiveTurn","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Output":"=== RUN TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Output":"--- PASS: TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDecodeOpenAIJSONUseNumberRejectsTrailingDocument","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Output":"=== RUN TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Output":"--- PASS: TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRestoreCodexToolNamesFromSSEContextUsesEventLineTypeWithoutAddingType","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Output":"=== RUN TestEnsureCodexReasoningInclude\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Output":"--- PASS: TestEnsureCodexReasoningInclude (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureCodexReasoningInclude","Elapsed":0} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata"} {"Time":"2026-09-12T11:38:29.2145005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Output":"=== RUN TestApplyCodexClientMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Output":"--- PASS: TestApplyCodexClientMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexClientMetadata","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Output":"=== RUN TestDefaultCodexSynthInstructionsModelAware\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Output":"--- PASS: TestDefaultCodexSynthInstructionsModelAware (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultCodexSynthInstructionsModelAware","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationPreservesInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationPreservesInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesInput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Output":"=== RUN TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_MessagesBridgePromptCacheKeyIsHeaderOnly","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationPreservesNativeMessageAndReasoningIDs","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Output":"=== RUN TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolContinuationNormalizesToolReferenceIDsOnly","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesIsolatedLegacyReferenceAcrossTurns","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/non-native_boundary_id","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/overlong_fc_id","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing/equivalent_prefixes","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsLongCallIDsAndPreservesPairing","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/anthropic_toolu_id","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested/boundary_64_chars","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesCallIDsWithinLimitWhenRequested","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Output":"=== RUN TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactsOverlongCallIDsWhenPreserveRequested","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Output":"=== RUN TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ToolSearchOutputPreservesCallID","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Output":"=== RUN TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CustomAndMCPToolOutputsPreserveCallID","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesNativeToolCallPairsByType","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesNativeCallIDsWhenRequested","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Output":"=== RUN TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Output":"--- PASS: TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_BoundsEquivalentNativeToolCallIDsWithPairing","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Output":"=== RUN TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Output":"--- PASS: TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ImageAndWebSearchCallsDoNotGainCallID","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Output":"=== RUN TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Output":"--- PASS: TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ConvertsToolRoleMessageToFunctionCallOutput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Output":"=== RUN TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Output":"--- PASS: TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringifiesNonStringMessageContentText","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/auto","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/top_level/required","Elapsed":0} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto"} {"Time":"2026-09-12T11:38:29.2150118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/auto","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools/additional_tools/required","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesAllowedTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesAllowedTools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Output":"=== RUN TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Output":"--- PASS: TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexToolChoice_InvalidAllowedToolsNeverBecomesAuto","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Output":"=== RUN TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Output":"--- PASS: TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AllowedToolsKeepsReservedNameReferences","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesUnknownToolChoice","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesKnownToolChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesKnownToolChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesKnownToolChoice","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesLegacyFunctionToolChoice","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Output":"=== RUN TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Output":"--- PASS: TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DowngradesMissingFunctionToolChoice","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Output":"=== RUN TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Output":"--- PASS: TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsFallbackNameForFunctionCallInput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesFunctionCallInputName\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesFunctionCallInputName (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesFunctionCallInputName","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesMCPToolCallIDAndName","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Output":"=== RUN TestCodexInputItemRequiresNameTypesAllowCallID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Output":"--- PASS: TestCodexInputItemRequiresNameTypesAllowCallID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexInputItemRequiresNameTypesAllowCallID","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Output":"=== RUN TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Output":"--- PASS: TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreFalsePreserved","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Output":"=== RUN TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Output":"--- PASS: TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExplicitStoreTrueForcedFalse","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Output":"=== RUN TestApplyCodexOAuthTransform_CompactForcesNonStreaming\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Output":"--- PASS: TestApplyCodexOAuthTransform_CompactForcesNonStreaming (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CompactForcesNonStreaming","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Output":"=== RUN TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Output":"--- PASS: TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonContinuationDefaultsStoreFalseAndStripsIDs","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Output":"=== RUN TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Output":"--- PASS: TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_RemovesItemReferenceWhenNotPreserved","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizeCodexTools_PreservesResponsesFunctionTools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Output":"=== RUN TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Output":"--- PASS: TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_RewritesLegacyFields","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_NoTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_NoTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_NoTools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_SkipsSpark","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_AppendsToExistingTools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesExistingImageTool","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/top-level_tools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools","Output":"=== RUN TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace/responses_lite_additional_tools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Output":"--- PASS: TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIResponsesImageGenerationTool_PreservesImageGenNamespace","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/flat_image_gen_function","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/nested_image_gen_function","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Output":"=== RUN TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools/similar_function_name_still_receives_hosted_bridge","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Output":"--- PASS: TestCodexImageGenerationBridge_PreservesClientImageFunctionTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexImageGenerationBridge_PreservesClientImageFunctionTools","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_AppendsBridgeOnce","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsSpark","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Output":"=== RUN TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Output":"--- PASS: TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexImageGenerationBridgeInstructions_SkipsWithoutImageTool","Elapsed":0} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Output":"=== RUN TestValidateCodexSparkInputRejectsInputImage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2155212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Output":"--- PASS: TestValidateCodexSparkInputRejectsInputImage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsInputImage","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Output":"=== RUN TestValidateCodexSparkInputRejectsChatImageURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Output":"--- PASS: TestValidateCodexSparkInputRejectsChatImageURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputRejectsChatImageURL","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Output":"=== RUN TestValidateCodexSparkInputAllowsTextOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Output":"--- PASS: TestValidateCodexSparkInputAllowsTextOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexSparkInputAllowsTextOnly","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_AddsSparkImageUnsupportedInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Output":"=== RUN TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_DoesNotAddSparkImageUnsupportedForNonSpark","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Output":"=== RUN TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSpark","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Output":"=== RUN TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsImageGenerationToolForSparkAlias","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Output":"=== RUN TestStripOpenAIImageGenerationTools_StripsNamespaceFormats\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Output":"--- PASS: TestStripOpenAIImageGenerationTools_StripsNamespaceFormats (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_StripsNamespaceFormats","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Output":"=== RUN TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Output":"--- PASS: TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsNonImageNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Output":"=== RUN TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Output":"--- PASS: TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationTools_KeepsCustomImagegenFunctionChoice","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Output":"=== RUN TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Output":"--- PASS: TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_KeepsImageGenerationToolForNonSpark","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Output":"=== RUN TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Output":"--- PASS: TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_BuildsImageToolRequest","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Output":"=== RUN TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Output":"--- PASS: TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageOnlyModel_PreservesExistingImageTool","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Output":"=== RUN TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Output":"--- PASS: TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIResponsesImageModel_RejectsImageOnlyModel","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Output":"=== RUN TestApplyCodexOAuthTransform_EmptyInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Output":"--- PASS: TestApplyCodexOAuthTransform_EmptyInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyInput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Output":"=== RUN TestNormalizeCodexModel_Gpt53\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Output":"--- PASS: TestNormalizeCodexModel_Gpt53 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_Gpt53","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Output":"=== RUN TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Output":"--- PASS: TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel_RemovedModelsFallbackToSupportedTargets","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Output":"=== RUN TestApplyCodexOAuthTransform_PreservesBareSparkModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Output":"--- PASS: TestApplyCodexOAuthTransform_PreservesBareSparkModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_PreservesBareSparkModel","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Output":"=== RUN TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Output":"--- PASS: TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_TrimmedModelWithoutPolicyRewrite","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_PreservesExistingInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Output":"=== RUN TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Output":"--- PASS: TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_CodexCLI_SuppliesDefaultWhenEmpty","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT55SuppliesModelSpecificInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_GPT6AstraSuppliesModelSpecificInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Output":"=== RUN TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Output":"--- PASS: TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NonCodexCLI_PreservesExistingInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Output":"=== RUN TestApplyCodexOAuthTransform_StringInputConvertedToArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Output":"--- PASS: TestApplyCodexOAuthTransform_StringInputConvertedToArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputConvertedToArray","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Output":"=== RUN TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Output":"--- PASS: TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_EmptyStringInputBecomesEmptyArray","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Output":"=== RUN TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Output":"--- PASS: TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_WhitespaceStringInputBecomesEmptyArray","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Output":"=== RUN TestApplyCodexOAuthTransform_StringInputWithToolsField\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Output":"--- PASS: TestApplyCodexOAuthTransform_StringInputWithToolsField (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StringInputWithToolsField","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Output":"=== RUN TestApplyCodexOAuthTransform_StripsPromptCacheRetention\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsPromptCacheRetention (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsPromptCacheRetention","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Output":"=== RUN TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Output":"--- PASS: TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_StripsChatGPTInternalUnsupportedFields","Elapsed":0} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands"} {"Time":"2026-09-12T11:38:29.2160312+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Output":"=== RUN TestApplyCodexOAuthTransform_NormalizesPromptAndCommands\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Output":"--- PASS: TestApplyCodexOAuthTransform_NormalizesPromptAndCommands (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_NormalizesPromptAndCommands","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Output":"=== RUN TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Output":"--- PASS: TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesImageGenerationTools_StripsGPTImage2InputFidelity","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Output":"=== RUN TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Output":"--- PASS: TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyImageGenerationToolNeedsNormalization_GPTImage2InputFidelity","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Output":"=== RUN TestApplyCodexOAuthTransform_ExtractsSystemMessages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Output":"--- PASS: TestApplyCodexOAuthTransform_ExtractsSystemMessages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_ExtractsSystemMessages","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Output":"=== RUN TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Output":"--- PASS: TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexOAuthTransform_JsonObjectKeepsJsonInstructionInInput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=true","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Output":"=== RUN TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID/preserveReferences=false","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningStripsID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningStripsID","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Output":"=== RUN TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Output":"--- PASS: TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_BareReasoningStripsIDBackfillsSummary","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Output":"=== RUN TestFilterCodexInput_ReasoningBackfillsMissingSummary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Output":"--- PASS: TestFilterCodexInput_ReasoningBackfillsMissingSummary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_ReasoningBackfillsMissingSummary","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Output":"=== RUN TestFilterCodexInput_PreservesReasoningSummaryAndContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningSummaryAndContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningSummaryAndContent","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=true","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Output":"=== RUN TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput/preserveReferences=false","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Output":"--- PASS: TestFilterCodexInput_PreservesReasoningInMixedInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexInput_PreservesReasoningInMixedInput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Output":"=== RUN TestOpenAICodexTurnStateSeed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Output":"--- PASS: TestOpenAICodexTurnStateSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexTurnStateSeed","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Output":"=== RUN TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Output":"--- PASS: TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_SetsHeaderAndRecordsProvenance","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Output":"=== RUN TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Output":"--- PASS: TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRelayOpenAICodexTurnState_ClearsStaleValueWhenUpstreamAbsent","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Output":"=== RUN TestStageOpenAICodexTurnState_StagedHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Output":"--- PASS: TestStageOpenAICodexTurnState_StagedHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageOpenAICodexTurnState_StagedHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Output":"=== RUN TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Output":"--- PASS: TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNoteStagedOpenAICodexTurnStateCommitted_NoopWithoutState","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/same_account_keeps_echo","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/foreign_account_strips_echo","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_provenance_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/expired_provenance_passthrough_and_pruned","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_session_seed_noop","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Output":"=== RUN TestGuardOpenAICodexTurnStateEcho/no_echo_noop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho/no_echo_noop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho/no_echo_noop","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Output":"--- PASS: TestGuardOpenAICodexTurnStateEcho (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGuardOpenAICodexTurnStateEcho","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Output":"=== RUN TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Output":"--- PASS: TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSweepOpenAICodexTurnStateOrigins_PrunesExpiredEntries","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Output":"=== RUN TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Output":"--- PASS: TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysAndClearsTurnState","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Output":"=== RUN TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Output":"--- PASS: TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughResponseHeaders_RelaysReasoningIncluded","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/absent_sets_feature","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/present_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/other_tokens_merged","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line","Output":"=== RUN TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature/multi_line_values_merged_single_line","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Output":"--- PASS: TestEnsureOpenAIRemoteCompactionV2BetaFeature (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEnsureOpenAIRemoteCompactionV2BetaFeature","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Output":"=== RUN TestApplyOpenAICodexBetaFeatures\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/oauth_plain_request_gets_default_codex_shape","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/client_declared_header_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:29.2165416+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_forces_feature_even_when_client_trimmed_it","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/native_v2_applies_to_non_oauth_too","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/non_oauth_plain_request_untouched","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Output":"=== RUN TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures/nil_account_plain_request_untouched","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Output":"--- PASS: TestApplyOpenAICodexBetaFeatures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICodexBetaFeatures","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"=== RUN TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Output":"--- PASS: TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeaders_CarriesSessionBetaFeatures","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Output":"=== RUN TestLatestCodexStableReleaseVersion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Output":"--- PASS: TestLatestCodexStableReleaseVersion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLatestCodexStableReleaseVersion","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"=== RUN TestOpenAICodexVersionSyncWritesLatestStableVersion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Output":"--- PASS: TestOpenAICodexVersionSyncWritesLatestStableVersion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncWritesLatestStableVersion","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Output":"=== RUN TestOpenAICodexVersionSyncNeverMovesBackwards\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Output":"--- PASS: TestOpenAICodexVersionSyncNeverMovesBackwards (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncNeverMovesBackwards","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Output":"=== RUN TestOpenAICodexVersionSyncSkippedWhenDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Output":"--- PASS: TestOpenAICodexVersionSyncSkippedWhenDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncSkippedWhenDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"=== RUN TestOpenAICodexVersionSyncEnabledByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Output":"--- PASS: TestOpenAICodexVersionSyncEnabledByDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncEnabledByDefault","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"=== RUN TestOpenAICodexVersionSyncKeepsValueOnFetchError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_sync_latest_fetch_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"network down\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_sync_fetch_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"network down\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Output":"--- PASS: TestOpenAICodexVersionSyncKeepsValueOnFetchError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncKeepsValueOnFetchError","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"=== RUN TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Output":"--- PASS: TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncUsesLatestReleaseEndpoint","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_属于其他_tag_家族","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_是预发布","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_sync_latest_fetch_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"network down\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_抓取失败","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"=== RUN TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList/latest_为空","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Output":"--- PASS: TestOpenAICodexVersionSyncFallsBackToReleaseList (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncFallsBackToReleaseList","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"=== RUN TestOpenAICodexVersionSyncLatestSharesFiltering\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Output":"--- PASS: TestOpenAICodexVersionSyncLatestSharesFiltering (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncLatestSharesFiltering","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Output":"=== RUN TestOpenAICodexVersionSyncStartRequiresDependencies\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Output":"--- PASS: TestOpenAICodexVersionSyncStartRequiresDependencies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncStartRequiresDependencies","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Output":"=== RUN TestGetOpenAICodexClientVersionPriority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/面板覆写优先\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/面板覆写优先 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/面板覆写优先","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/覆写为空时用同步值","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/两者皆空时用内置常量","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法覆写回退同步值","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Output":"=== RUN TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority/非法同步值回退内置常量","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Output":"--- PASS: TestGetOpenAICodexClientVersionPriority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionPriority","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"=== RUN TestGetOpenAICodexClientVersionFallsBackOnError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"failed to get openai codex client version setting\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"db down\"}\n"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Output":"--- PASS: TestGetOpenAICodexClientVersionFallsBackOnError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexClientVersionFallsBackOnError","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentBuildsFromVersion","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/陈旧面板_UA_跟随生效版本","Elapsed":0} {"Time":"2026-09-12T11:38:29.2170482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/自定义指纹原样保留","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/TUI_UA_的首尾两个版本号同时更新","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/面板版本号覆写优先","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Output":"=== RUN TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion/非_Codex_形态原样返回","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Output":"--- PASS: TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAICodexCanonicalUserAgentRebuildsPanelUAVersion","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Output":"=== RUN TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Output":"--- PASS: TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialSkipsWhenRecentlySynced","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"0.146.0\",\"version\":\"0.147.0\"}\n"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/同步值已过期","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"=== RUN TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"logger\":\"slog\",\"msg\":\"openai_codex_version_synced\",\"service\":\"sub2api\",\"env\":\"test\",\"previous\":\"\",\"version\":\"0.146.0\"}\n"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing/尚无同步值","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Output":"--- PASS: TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICodexVersionSyncInitialRunsWhenStaleOrMissing","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Output":"=== RUN TestCodexVersionComparisonIsNumericNotLexical\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Output":"--- PASS: TestCodexVersionComparisonIsNumericNotLexical (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexVersionComparisonIsNumericNotLexical","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryRequiresExplicitCompact","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryPreservesNativeTriggerAndContext","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Output":"=== RUN TestResolveOpenAICompactFallbackModelPrefersAccountMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Output":"--- PASS: TestResolveOpenAICompactFallbackModelPrefersAccountMapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactFallbackModelPrefersAccountMapping","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"=== RUN TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"[OpenAI] Compact model mapping applied: gpt-5.5 -\u003e global-compact (account: openai-oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"global-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Output":"--- PASS: TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardUsesGlobalCompactModelOnInitialLegacyRequest","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryLegacyPathAndSingleAttemptGuard","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Output":"=== RUN TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetryDoesNotHideSpecificBusinessFailure","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/explicit_unsupported_model","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/named_missing_model","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_code-like_message","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_model_feature","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model","Output":"=== RUN TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage/unsupported_parameter_for_model","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Output":"--- PASS: TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAICompactModelFailureRequiresExplicitModelAvailabilityMessage","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Output":"=== RUN TestPrepareOpenAICompactFallbackRetrySkipsSameModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Output":"--- PASS: TestPrepareOpenAICompactFallbackRetrySkipsSameModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAICompactFallbackRetrySkipsSameModel","Elapsed":0} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"=== RUN TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2176296+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.217Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"[OpenAI] Retrying explicit compact request once with fallback model (account: openai-oauth, from: gpt-5.5, to: gpt-5.4, upstream_code: context_length_exceeded)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Output":"--- PASS: TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactHTTPFailureOnce","Elapsed":0} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"=== RUN TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Output":"--- PASS: TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardNonStreamCompactRetryRecordsAttemptWithManagedProxy","Elapsed":0} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"=== RUN TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Output":"--- PASS: TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardCompactFailoverEventCarriesManagedProxy","Elapsed":0} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput"} {"Time":"2026-09-12T11:38:29.2181447+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"=== RUN TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Output":"--- PASS: TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesExplicitNativeCompactSSEFailureBeforeOutput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"=== RUN TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Output":"--- PASS: TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardRetriesStreamingCompactFailureBeforeOutput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"=== RUN TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Output":"--- PASS: TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayForwardDoesNotRecurseWhenCompactFallbackAlsoFails","Elapsed":0} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"=== RUN TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=1 name=openai-oauth type=oauth model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2186557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.218Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"[OpenAI passthrough] Retrying explicit compact request once with fallback model (account: openai-oauth, from: gpt-5.5, to: gpt-5.4, upstream_code: )\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Output":"--- PASS: TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughCompactFallbackSecondStreamFailureUsesStandardErrorPath","Elapsed":0} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"=== RUN TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4 -\u003e gpt-5.3-codex (account: openai-oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"[OpenAI] Compact model mapping applied: gpt-5.4 -\u003e gpt-5.4-openai-compact (account: openai-oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4-openai-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Output":"--- PASS: TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CompactOnlyModelMappingOverridesOAuthUpstreamModel","Elapsed":0} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Output":"=== RUN TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.219Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Output":"--- PASS: TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyCompactSanitizesStatelessReplayAfterStoreWasDropped","Elapsed":0} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup"} {"Time":"2026-09-12T11:38:29.2191639+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesCompactionTriggerAfterHistoryCleanup","Elapsed":0} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Output":"=== RUN TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Output":"--- PASS: TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NonCompactRequestIgnoresCompactOnlyModelMapping","Elapsed":0} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel"} {"Time":"2026-09-12T11:38:29.220202+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=3 name=openai-oauth-pass type=oauth model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":3,\"final_model\":\"gpt-5.4-openai-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactOnlyModelMappingOverridesUpstreamModel","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_SuccessMarksSupported","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_404MarksUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_502DoesNotMarkUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_RequestErrorDoesNotMarkUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_NoResponseClearsLastStatus","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_UnknownModelDoesNotMarkUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_EmptyFailureBodyFallsBackToHTTPStatus","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Output":"=== RUN TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Output":"--- PASS: TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactProbeExtraUpdates_2xxWithoutCompactionItemMarksUnsupported","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Output":"=== RUN TestCreateOpenAICompactProbePayload_NativeV2Shape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Output":"--- PASS: TestCreateOpenAICompactProbePayload_NativeV2Shape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCreateOpenAICompactProbePayload_NativeV2Shape","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Output":"=== RUN TestOpenAICompactProbeFoundCompactionItem\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Output":"--- PASS: TestOpenAICompactProbeFoundCompactionItem (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Output":"=== RUN TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Output":"--- PASS: TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactProbeFoundCompactionItem_TerminalResponseOutput","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyPreservesServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyPreservesServiceTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesServiceTier","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Output":"=== RUN TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Output":"=== RUN TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Output":"--- PASS: TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/ordinary","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Output":"=== RUN TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:29.220Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Output":"--- PASS: TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Output":"--- PASS: TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthCompactHTTPBuildersUsePreservedServiceTierInRoutingHint","Elapsed":0} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled"} {"Time":"2026-09-12T11:38:29.2207168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled","Output":"=== RUN TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled","Output":"--- PASS: TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled (0.40s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAICompactSSEKeepalive_NoopWhenUnmarkedOrDisabled","Elapsed":0.4} {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments"} {"Time":"2026-09-12T11:38:29.6217059+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments","Output":"=== RUN TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments","Output":"--- PASS: TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_CommitsHeadersAndComments","Elapsed":0.2} {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched"} {"Time":"2026-09-12T11:38:29.8222178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched","Output":"=== RUN TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.9776705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"testing: warning: no tests to run\n"} {"Time":"2026-09-12T11:38:29.9776705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:29.9786934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint\t0.766s [no tests to run]\n"} {"Time":"2026-09-12T11:38:29.9786934+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Elapsed":0.766} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched","Output":"--- PASS: TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactSSEKeepalive_StopBeforeFirstBeatKeepsWriterUntouched","Elapsed":0.2} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive"} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Output":"=== RUN TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Output":"--- PASS: TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIAdjustedWrittenSizeExcludesResponsesStreamKeepalive","Elapsed":0} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents"} {"Time":"2026-09-12T11:38:30.022571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents","Output":"=== RUN TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitAppendsEvents","Elapsed":0.2} {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent"} {"Time":"2026-09-12T11:38:30.2228365+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent","Output":"=== RUN TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_AfterKeepaliveCommitFailureEmitsFailedEvent","Elapsed":0.2} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath"} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Output":"=== RUN TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_BeforeKeepaliveCommitFailureKeepsJSONPath","Elapsed":0} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats"} {"Time":"2026-09-12T11:38:30.4231752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats","Output":"=== RUN TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats (0.40s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_RequestSideWriteSuspendsBeats","Elapsed":0.4} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic","Output":"=== RUN TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilInnerWriter_NoPanic","Elapsed":0} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic","Output":"=== RUN TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_NilKeepalive_NoPanic","Elapsed":0} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Output":"=== RUN TestOpenAICompactKeepaliveWriter_DelegatesWhenReady\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Output":"--- PASS: TestOpenAICompactKeepaliveWriter_DelegatesWhenReady (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveWriter_DelegatesWhenReady","Elapsed":0} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit"} {"Time":"2026-09-12T11:38:30.8235915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit","Output":"=== RUN TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit","Output":"--- PASS: TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_AfterKeepaliveCommit","Elapsed":0.2} {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes"} {"Time":"2026-09-12T11:38:31.0239385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes","Output":"=== RUN TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes","Output":"--- PASS: TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompactKeepaliveAdjustedWrittenSize_ExcludesHeartbeatBytes","Elapsed":0.2} {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes"} {"Time":"2026-09-12T11:38:31.2239999+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes","Output":"=== RUN TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes","Output":"--- PASS: TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamClientOutputStarted_IgnoresCompactKeepaliveBytes","Elapsed":0.2} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Output":"=== RUN TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Output":"--- PASS: TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponse_BeforeKeepaliveCommit","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Output":"=== RUN TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_EmitsItemsAndCompleted","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Output":"=== RUN TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_InjectsMissingResponseID","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Output":"=== RUN TestBuildOpenAICompactSSEPayload_DropsMalformedUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_DropsMalformedUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_DropsMalformedUsage","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Output":"=== RUN TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_KeepsWellFormedUsage","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Output":"=== RUN TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Output":"--- PASS: TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAICompactSSEPayload_RejectsNonJSONObject","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Output":"=== RUN TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Output":"--- PASS: TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAICompactSSEBridge_RequiresMarkAndSuccessStatus","Elapsed":0} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"=== PAUSE TestNormalizeOpenAICompatRequestedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"=== RUN TestApplyOpenAICompatModelNormalization\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"=== PAUSE TestApplyOpenAICompatModelNormalization\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== RUN TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== PAUSE TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== RUN TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== PAUSE TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"=== RUN TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"=== PAUSE TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== RUN TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== PAUSE TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份"} {"Time":"2026-09-12T11:38:31.4243042+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/官方vscode身份","Elapsed":0} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4248896+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.424Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/TUI身份","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"=== RUN TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.425Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.425Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.425Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders/第三方UA","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Output":"--- PASS: TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_OAuthRestoresCodexIdentityHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== RUN TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== PAUSE TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== RUN TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== PAUSE TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_EmptyInputs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_EmptyInputs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyInputs","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ModelOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ModelOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ModelOnly","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StableAcrossTurns","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_IgnoresLaterSystemMessages","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_UsesLeadingSystemDeveloperPrefix","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentFirstUserDiffers","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentSystemDiffers","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DifferentModelDiffers","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithTools","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_WithFunctions","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_DeveloperRole","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ChatCompletions_StructuredContent","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputString","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputArray","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_WithInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_Deterministic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4254527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_Deterministic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_Deterministic","Elapsed":0} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_PrefixPresent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_PrefixPresent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_PrefixPresent","Elapsed":0} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_EmptyToolsIgnored","Elapsed":0} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_MessagesPreferredOverInput","Elapsed":0} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_JSONCanonicalisation","Elapsed":0} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions"} {"Time":"2026-09-12T11:38:31.4260187+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_chat_completions","Elapsed":0} {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses"} {"Time":"2026-09-12T11:38:31.4280672+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/large_responses","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/fields_in_reverse_order","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/missing_and_wrong_type_fields","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/duplicate_fields_keep_first_value","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_field_names","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_object_fields_are_outside_the_root","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_quoted_fields_are_outside_the_root","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/leading_garbage_before_the_root","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/escaped_braces_remain_inside_string_values","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/nested_braces_do_not_end_the_root","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/root_array_does_not_expose_nested_or_trailing_object_fields","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/trailing_messages_do_not_override_root_input","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/truncated_string_containing_a_closing_brace","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes/lenient_truncated_body","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_SingleScanMatchesLegacyBytes","Elapsed":0} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes"} {"Time":"2026-09-12T11:38:31.4301497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_AllTruncationOffsetsMatchLegacyBytes","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_InputTextTypedItem","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem","Output":"=== RUN TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem","Output":"--- PASS: TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIContentSessionSeed_ResponsesAPI_TypedMessageItem","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IgnoresUserContent","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_IsolatesStablePrefixFields","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_ChatSystemAndDeveloper","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesSystemAndDeveloperRoles","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_EncodesInstructionDelimiters","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Output":"=== RUN TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Output":"--- PASS: TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIAnchoredContentSessionSeed_RequiresMeaningfulAnchor","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Output":"=== RUN TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Output":"--- PASS: TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDeriveOpenAIStablePrefixSessionSeed_RequiresMeaningfulPrefix","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Output":"=== RUN TestDetectOpenAICyberPolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error","Output":"=== RUN TestDetectOpenAICyberPolicy/top-level_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error","Output":"--- PASS: TestDetectOpenAICyberPolicy/top-level_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/top-level_error","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped","Output":"=== RUN TestDetectOpenAICyberPolicy/response-wrapped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped","Output":"--- PASS: TestDetectOpenAICyberPolicy/response-wrapped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/response-wrapped","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive","Output":"=== RUN TestDetectOpenAICyberPolicy/case-insensitive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive","Output":"--- PASS: TestDetectOpenAICyberPolicy/case-insensitive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/case-insensitive","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber","Output":"=== RUN TestDetectOpenAICyberPolicy/content_policy_not_cyber\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber","Output":"--- PASS: TestDetectOpenAICyberPolicy/content_policy_not_cyber (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/content_policy_not_cyber","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber","Output":"=== RUN TestDetectOpenAICyberPolicy/safety_message_not_cyber\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber","Output":"--- PASS: TestDetectOpenAICyberPolicy/safety_message_not_cyber (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/safety_message_not_cyber","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Output":"=== RUN TestDetectOpenAICyberPolicy/empty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Output":"--- PASS: TestDetectOpenAICyberPolicy/empty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/empty","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error","Output":"=== RUN TestDetectOpenAICyberPolicy/upstream_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error","Output":"--- PASS: TestDetectOpenAICyberPolicy/upstream_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy/upstream_error","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Output":"--- PASS: TestDetectOpenAICyberPolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAICyberPolicy","Elapsed":0} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"=== RUN TestBuildOpenAIEmbeddingsURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"=== RUN TestCollectOpenAIEncryptedContentDigestsRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"=== PAUSE TestCollectOpenAIEncryptedContentDigestsRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentFromReplayItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentFromReplayItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4327691+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/root\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/root (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/root","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/v1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/v1","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/prefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/prefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/prefix","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/version\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/version (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/version","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/query\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/query (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/query","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/fragment_is_removed","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/ipv6","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete","Output":"=== RUN TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents/already_complete","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Output":"--- PASS: TestBuildOpenAIEndpointURLPreservesURLComponents (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEndpointURLPreservesURLComponents","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-a (account: account-a, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"base-model-a\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-b (account: account-b, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"base-model-b\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/both_accounts_have_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4-high -\u003e gpt-5.4 (account: account-a, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4332791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.4-high -\u003e gpt-5.4 (account: account-b, type: oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_mapping_second_account_has_none","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"alias-model\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-b (account: account-b, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"base-model-b\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/first_account_has_no_mapping_second_account_has_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"=== RUN TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-a (account: account-a, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"base-model-a\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"[OpenAI] Model mapping applied: alias-model -\u003e base-model-b (account: account-b, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"base-model-b\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount/legacy_context_cache_is_ignored_when_mappings_differ","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount","Output":"--- PASS: TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_FailoverReparsesCachedBodyForNextAccount","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody","Output":"=== RUN TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody","Output":"--- PASS: TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_HandleFailoverSideEffects_DoesNotRereadResponseBody","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Output":"=== RUN TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Output":"--- PASS: TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_IgnoresLegacyContextCache","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Output":"=== RUN TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_DefaultPassesKnownTiers","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Output":"=== RUN TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_BlockRuleCarriesMessage","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Output":"=== RUN TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_ScopeFiltersOAuth","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Output":"=== RUN TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Output":"--- PASS: TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEvaluateOpenAIFastPolicy_UserScopedRuleOverridesGlobalRule","Elapsed":0} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4337849+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_DefaultPassesPriorityAndFast","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ExplicitFilterRemovesField","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UserScopedRuleOverridesGlobalRule","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PriorityFilterLeavesUltrafast","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_ForcePriorityRewritesKnownTier","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceInjectsAndOverridesTier","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceStillHonorsGlobalPolicy","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresHydratedGroup","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceOnlyTargetsOpenAIAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_GroupForceRequiresSupportedGroupPlatform","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_OfficialTiersBypassDefaultRule","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_AllRuleStripsOfficialTiers","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_UnknownTierStripped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_UnknownTierStripped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_UnknownTierStripped","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockReturnsTypedError","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Output":"=== RUN TestSetOpenAIFastPolicySettings_Validation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Output":"--- PASS: TestSetOpenAIFastPolicySettings_Validation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIFastPolicySettings_Validation","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Output":"=== RUN TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Output":"--- PASS: TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_HasEventIDAndCode","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Output":"=== RUN TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Output":"--- PASS: TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIFastPolicyBlockedWSEvent_NilSafe","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Output":"=== RUN TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Output":"--- PASS: TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughPolicyModelDoesNotApplyAccountMapping","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_BlockShortCircuitsUpstream","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Output":"=== RUN TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Output":"--- PASS: TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropicMessages_BetaFastModePassesOpenAIFastPolicyByDefault","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_PassNormalizesFastAlias","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Output":"=== RUN TestApplyOpenAIFastPolicyToBody_NonStringServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Output":"--- PASS: TestApplyOpenAIFastPolicyToBody_NonStringServiceTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIFastPolicyToBody_NonStringServiceTier","Elapsed":0} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"=== RUN TestValidateOpenAIServiceTierField\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"=== PAUSE TestValidateOpenAIServiceTierField\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"=== PAUSE TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"=== PAUSE TestOpenAIFastBillingMultiplier_2xAnd25x\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4342925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"=== RUN TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"=== PAUSE TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"=== PAUSE TestResolvedOpenAIUpstreamServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait"} {"Time":"2026-09-12T11:38:31.4348251+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"=== RUN TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:31.4353446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:31.435Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.434Z\",\"msg\":\"OpenAI first output timeout: account=1 model=gpt-5.5 effort=low phase=response_headers elapsed=1.0000859s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Output":"--- PASS: TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardFirstOutputTimeoutIncludesResponseHeaderWait","Elapsed":1} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledPreservesSynchronousStream","Elapsed":0} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader"} {"Time":"2026-09-12T11:38:32.434911+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.4355101+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.435Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=2.0005991s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutIgnoresPreambleAndCleansReader","Elapsed":0.2} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"=== RUN TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.635Z\",\"msg\":\"OpenAI first output timeout: account=2 model=gpt-5.5 effort= phase=websocket_first_semantic_output elapsed=0s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:32.635Z\",\"msg\":\"OpenAI first output timeout: account=1 model=gpt-5.5 effort= phase=semantic_output elapsed=0s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Output":"--- PASS: TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIFirstOutputTimeoutErrorRecordsCallerProxyAttribution","Elapsed":0} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Output":"=== RUN TestOpenAIFirstOutputTimeoutForReasoningEffort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Output":"--- PASS: TestOpenAIFirstOutputTimeoutForReasoningEffort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputTimeoutForReasoningEffort","Elapsed":0} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Output":"=== RUN TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Output":"--- PASS: TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageDefaultLimitIsIndependentFromScannerLimit","Elapsed":0} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Output":"=== RUN TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Output":"--- PASS: TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputEventQueueSizeBackpressuresGuardedStreams","Elapsed":0} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive"} {"Time":"2026-09-12T11:38:32.6350118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Output":"=== RUN TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Output":"--- PASS: TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputDynamicScannerLimitsOnlyWhileGuardIsActive","Elapsed":0} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Output":"=== RUN TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Output":"--- PASS: TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageOverflowIsAtomicAndCleanupRemovesSpool","Elapsed":0} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Output":"=== RUN TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Output":"--- PASS: TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageCommitCopiesSpoolAndRemovesTemp","Elapsed":0} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup"} {"Time":"2026-09-12T11:38:32.6361485+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Output":"=== RUN TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Output":"--- PASS: TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFirstOutputStageUnlinkFailurePermanentlyFallsBackToMemoryAndRetriesCleanup","Elapsed":0} {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput"} {"Time":"2026-09-12T11:38:32.6371649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput (1.10s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisarmsAfterSemanticOutput","Elapsed":1.1} {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent"} {"Time":"2026-09-12T11:38:33.7369133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"=== RUN TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"--- PASS: TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Elapsed":0} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"=== RUN TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"--- PASS: TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Elapsed":0} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7659677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Elapsed":0} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Elapsed":0} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Output":"=== RUN TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Output":"--- PASS: TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestShouldEnqueueSchedulerOutboxForExtraUpdates_OpenAIResponsesCapabilityKeysAreRelevant","Elapsed":0} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Output":"=== RUN TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Output":"--- PASS: TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateCredentialsAtomicallyClearsProbeForOpenAIAPIKeyIdentityChange","Elapsed":0} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile"} {"Time":"2026-09-12T11:38:33.7664925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"=== RUN TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"--- PASS: TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Elapsed":0} {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello"} {"Time":"2026-09-12T11:38:33.7670033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"=== RUN TestMode1DoWithTLSActuallyUsesClientHello\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"--- PASS: TestMode1DoWithTLSActuallyUsesClientHello (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Elapsed":0} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Output":"=== RUN TestNewOpenAIOAuthClient_DefaultTokenURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Output":"--- PASS: TestNewOpenAIOAuthClient_DefaultTokenURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestNewOpenAIOAuthClient_DefaultTokenURL","Elapsed":0} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Output":"=== RUN TestOpenAIOAuthServiceSuite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel"} {"Time":"2026-09-12T11:38:33.770135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestContextCancel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7711578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestContextCancel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7711578+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestContextCancel","Elapsed":0} {"Time":"2026-09-12T11:38:33.7716688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI"} {"Time":"2026-09-12T11:38:33.7716688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_DefaultRedirectURI","Elapsed":0} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint"} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_RequestErrorWithoutProxyReturnsProxyHint","Elapsed":0} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON"} {"Time":"2026-09-12T11:38:33.7721787+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_SuccessButInvalidJSON","Elapsed":0} {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID"} {"Time":"2026-09-12T11:38:33.7727289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UseProvidedClientID","Elapsed":0} {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI"} {"Time":"2026-09-12T11:38:33.7732366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestExchangeCode_UsesProvidedRedirectURI","Elapsed":0} {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody"} {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7737462+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestNonSuccessStatus_IncludesBody","Elapsed":0} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID"} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_DefaultsToOpenAIClientID","Elapsed":0} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields"} {"Time":"2026-09-12T11:38:33.7742558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_FormFields","Elapsed":0} {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus"} {"Time":"2026-09-12T11:38:33.7747668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_NonSuccessStatus","Elapsed":0} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID"} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRefreshToken_UseProvidedClientID","Elapsed":0} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer"} {"Time":"2026-09-12T11:38:33.775274+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestRequestError_ClosedServer","Elapsed":0} {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery"} {"Time":"2026-09-12T11:38:33.7757847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery","Output":"=== RUN TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery","Output":"--- PASS: TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite/TestTokenURL_CanBeOverriddenWithQuery","Elapsed":0} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Output":"--- PASS: TestOpenAIOAuthServiceSuite (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIOAuthServiceSuite","Elapsed":0.01} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Output":"=== RUN TestOpsRepositoryGetOpenAITokenStats_PaginationMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Output":"--- PASS: TestOpsRepositoryGetOpenAITokenStats_PaginationMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_PaginationMode","Elapsed":0} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode"} {"Time":"2026-09-12T11:38:33.7762931+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Output":"=== RUN TestOpsRepositoryGetOpenAITokenStats_TopNMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Output":"--- PASS: TestOpsRepositoryGetOpenAITokenStats_TopNMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_TopNMode","Elapsed":0} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Output":"=== RUN TestOpsRepositoryGetOpenAITokenStats_EmptyResult\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Output":"--- PASS: TestOpsRepositoryGetOpenAITokenStats_EmptyResult (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpsRepositoryGetOpenAITokenStats_EmptyResult","Elapsed":0} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Output":"=== RUN TestCreateOpenAIReqClient_Timeout120Seconds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Output":"--- PASS: TestCreateOpenAIReqClient_Timeout120Seconds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestCreateOpenAIReqClient_Timeout120Seconds","Elapsed":0} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Output":"=== RUN TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Output":"--- PASS: TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestSchedulerMetadataAccountKeepsOpenAISubscriptionIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"=== RUN TestMode1SchedulerProjectionRetainsPolicyAndProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"--- PASS: TestMode1SchedulerProjectionRetainsPolicyAndProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Elapsed":0} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease"} {"Time":"2026-09-12T11:38:33.7768038+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Output":"=== RUN TestMode1ConcurrencySlotsRemainBoundedAndRelease\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Output":"--- PASS: TestMode1ConcurrencySlotsRemainBoundedAndRelease (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1ConcurrencySlotsRemainBoundedAndRelease","Elapsed":0} {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow"} {"Time":"2026-09-12T11:38:33.7788684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Output":"=== RUN TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Output":"--- PASS: TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheTripsWithinRollingWindow","Elapsed":0} {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow"} {"Time":"2026-09-12T11:38:33.7809384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Output":"=== RUN TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Output":"--- PASS: TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestOpenAIAPIKeyHealthCacheDropsFailuresOutsideRollingWindow","Elapsed":0} {"Time":"2026-09-12T11:38:33.781465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:33.7858321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/repository\t4.572s\n"} {"Time":"2026-09-12T11:38:33.7858321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Elapsed":4.573} {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:34.737Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=1.0001679s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutWaitsForCompleteSemanticEvent","Elapsed":1} {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent"} {"Time":"2026-09-12T11:38:34.7370812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9361377+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON"} {"Time":"2026-09-12T11:38:34.9361377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Output":"=== RUN TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Output":"--- PASS: TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportEntryAcceptsAgentIdentityAuthJSON","Elapsed":0} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Output":"=== RUN TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Output":"--- PASS: TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestBuildCodexAgentIdentityKeysUseChatGPTAccountOnly","Elapsed":0} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Output":"=== RUN TestCodexAgentIdentityIndexSeparatesTeamsForSameUser\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Output":"--- PASS: TestCodexAgentIdentityIndexSeparatesTeamsForSameUser (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAgentIdentityIndexSeparatesTeamsForSameUser","Elapsed":0} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate"} {"Time":"2026-09-12T11:38:34.9366526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Output":"=== RUN TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Output":"--- PASS: TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsKeepsAgentIdentityTeamsSeparate","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Output":"=== RUN TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Output":"--- PASS: TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsMergesAgentIdentityRuntimesForSameTeam","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Output":"=== RUN TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Output":"--- PASS: TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsCreatesAgentIdentityWithoutOAuthExpiry","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Output":"=== RUN TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Output":"--- PASS: TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesSupportsRawTokenJSONAndArray","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Output":"=== RUN TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Output":"--- PASS: TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseCodexSessionImportEntriesFallsBackToLineModeForMixedJSONAndToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Output":"=== RUN TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Output":"--- PASS: TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexSessionJSONExtractsCredentialsAndIgnoresSessionToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Output":"=== RUN TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Output":"--- PASS: TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsPreservesExistingRefreshFieldsWhenIncomingHasNoRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Output":"=== RUN TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Output":"--- PASS: TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestMergeCodexImportCredentialsKeepsRefreshFieldsWhenIncomingHasRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Output":"=== RUN TestNormalizeCodexImportRejectsExpiredAccessToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Output":"--- PASS: TestNormalizeCodexImportRejectsExpiredAccessToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportRejectsExpiredAccessToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesTokenExpiry","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenRequiresExpiry","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Output":"=== RUN TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Output":"--- PASS: TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestResolveCodexImportExpiryForNoRefreshTokenUsesEarlierRequestExpiry","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Output":"=== RUN TestCodexIdentityKeysPreferStrongIdentifiers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Output":"--- PASS: TestCodexIdentityKeysPreferStrongIdentifiers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentityKeysPreferStrongIdentifiers","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Output":"=== RUN TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Output":"--- PASS: TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexDoesNotMatchDifferentUsersInSameChatGPTAccount","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Output":"=== RUN TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Output":"--- PASS: TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexFallsBackToAccountKeyWhenRefreshTokenExistsAndUserIDMissing","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Output":"=== RUN TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Output":"--- PASS: TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexAccessTokenOnlyUsesTokenFingerprint","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Output":"=== RUN TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Output":"--- PASS: TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexKeepsAllCandidatesForSharedAccountKey","Elapsed":0} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Output":"=== RUN TestCodexAccountIndexUpsertReplacesSameAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9371638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Output":"--- PASS: TestCodexAccountIndexUpsertReplacesSameAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpsertReplacesSameAccount","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Output":"=== RUN TestCodexAccountIndexUpdateRemovesAllPreviousKeys\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Output":"--- PASS: TestCodexAccountIndexUpdateRemovesAllPreviousKeys (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdateRemovesAllPreviousKeys","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Output":"=== RUN TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Output":"--- PASS: TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexAccountIndexUpdatePreservesSharedKeyCandidateOrder","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Output":"=== RUN TestCodexIdentitySeenDistinguishesTeamMembers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Output":"--- PASS: TestCodexIdentitySeenDistinguishesTeamMembers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestCodexIdentitySeenDistinguishesTeamMembers","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Output":"=== RUN TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Output":"--- PASS: TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestNormalizeCodexImportUsesJWTSubForAccessTokenOnlyIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceDifferentUsersCreatesTwoAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameWorkspaceAndUserDifferentTokensCreatesTwoAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlySameUserUpdatesExisting","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Output":"=== RUN TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Output":"--- PASS: TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsUpgradesAccessTokenOnlyAccountWithRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Output":"=== RUN TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Output":"--- PASS: TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsAccessTokenOnlyPreservesExistingRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Output":"=== RUN TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Output":"--- PASS: TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsBatchOldAccessTokenDoesNotRollbackRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Output":"=== RUN TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Output":"--- PASS: TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestImportCodexSessionsWithRefreshTokenKeepsExistingDedup","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthUsesExplicitModelMapping","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIOAuthPassthroughFallsBackToDefaults","Elapsed":0} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol"} {"Time":"2026-09-12T11:38:34.9376716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAIAPIKeyDefaultsToConcreteGPT56Sol","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels","Output":"=== RUN TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels","Output":"--- PASS: TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountHandlerGetAvailableModels_OpenAISparkShadowReturnsMappingModels","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/create","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/update","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/bulk_update","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/batch_create","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import","Output":"=== RUN TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue/Codex_session_import","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Output":"--- PASS: TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountAdminBoundariesRejectMalformedOpenAILongContextBillingValue","Elapsed":0} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms"} {"Time":"2026-09-12T11:38:34.938178+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Output":"=== RUN TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Output":"--- PASS: TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestAccountCreateBoundaryDoesNotApplyOpenAIValidationToOtherPlatforms","Elapsed":0} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Output":"=== RUN TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Output":"--- PASS: TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestApplyOAuthCredentialsRejectsMalformedOpenAILongContextBillingBeforeMutation","Elapsed":0} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Output":"=== RUN TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Output":"--- PASS: TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIOAuthCodexPATBoundaryRejectsMalformedOpenAILongContextBillingValueBeforeTokenValidation","Elapsed":0} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Output":"=== RUN TestParseOpsOpenAITokenStatsDuration\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Output":"--- PASS: TestParseOpsOpenAITokenStatsDuration (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsDuration","Elapsed":0} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults","Output":"=== RUN TestParseOpsOpenAITokenStatsFilter_Defaults\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults","Output":"--- PASS: TestParseOpsOpenAITokenStatsFilter_Defaults (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_Defaults","Elapsed":0} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN","Output":"=== RUN TestParseOpsOpenAITokenStatsFilter_WithTopN\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN","Output":"--- PASS: TestParseOpsOpenAITokenStatsFilter_WithTopN (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_WithTopN","Elapsed":0} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams"} {"Time":"2026-09-12T11:38:34.9386854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams","Output":"=== RUN TestParseOpsOpenAITokenStatsFilter_InvalidParams\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams","Output":"--- PASS: TestParseOpsOpenAITokenStatsFilter_InvalidParams (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestParseOpsOpenAITokenStatsFilter_InvalidParams","Elapsed":0} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/nil_input_returns_nil","Elapsed":0} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all' (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/empty_service_tier_becomes_'all'","Elapsed":0} {"Time":"2026-09-12T11:38:34.9391944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all' (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/whitespace-only_service_tier_becomes_'all'","Elapsed":0} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/uppercase_service_tier_is_lowercased","Elapsed":0} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)","Output":"=== RUN TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier/non-empty_values_pass_through_(lowercased)","Elapsed":0} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier","Output":"--- PASS: TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestOpenAIFastPolicySettingsFromDTO_NormalizesServiceTier","Elapsed":0} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast"} {"Time":"2026-09-12T11:38:34.9397093+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Output":"=== RUN TestGroupRequestsDecodeForceOpenAIFast\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Output":"--- PASS: TestGroupRequestsDecodeForceOpenAIFast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Test":"TestGroupRequestsDecodeForceOpenAIFast","Elapsed":0} {"Time":"2026-09-12T11:38:34.9402179+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:34.9437934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/handler/admin\t5.731s\n"} {"Time":"2026-09-12T11:38:34.9437934+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Elapsed":5.731} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:35.737Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=1.0002152s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDoesNotLeakLargePreambleEvent","Elapsed":1} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine"} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Output":"=== RUN TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Output":"--- PASS: TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputEOFDispatchesTerminalEventWithoutBlankLine","Elapsed":0} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes"} {"Time":"2026-09-12T11:38:35.7372964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"=== RUN TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.806641+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:35.806Z\",\"msg\":\"OpenAI first-output staging limit exceeded: account=1 model=model error=openai first-output staging limit exceeded: buffered=8386568 incoming=1048320 limit=8388608\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func7\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:275\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func14\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:705\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:881\\ngithub.com/Wei-Shaw/sub"} {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"2api/internal/service.(*OpenAIGatewayService).handleStreamingResponse\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:48\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_first_output_timeout_test.go:500\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Output":"--- PASS: TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes (0.07s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputStageOverflowFailsOverWithoutAttemptBytes","Elapsed":0.07} {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak"} {"Time":"2026-09-12T11:38:35.8074865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"=== RUN TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:35.812Z\",\"msg\":\"SSE token exceeded guarded first-output limit: account=1 limit=8388672 error=openai pre-output scanner token limit exceeded\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func13\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:418\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:877\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponse\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:48\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAINativeFirstOutputScannerReje"} {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"ctsOversizedLineWithoutLeak\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_first_output_timeout_test.go:532\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Output":"--- PASS: TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerRejectsOversizedLineWithoutLeak","Elapsed":0.01} {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary"} {"Time":"2026-09-12T11:38:35.812476+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Output":"=== RUN TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Output":"--- PASS: TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputScannerAllowsLargeEventAfterSemanticBoundary","Elapsed":0.12} {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive"} {"Time":"2026-09-12T11:38:35.9349495+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Output":"=== RUN TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Output":"--- PASS: TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive (2.10s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputTimeoutDisabledKeepsPreamblePrivateAcrossKeepalive","Elapsed":2.1} {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit"} {"Time":"2026-09-12T11:38:38.0352275+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Output":"=== RUN TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.035Z\",\"msg\":\"OpenAI first output timeout: account=1 model=model effort= phase=semantic_output elapsed=2.0004893s limit=2s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Output":"--- PASS: TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit (2.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeFirstOutputFailoverKeepsAttemptHeadersPrivateAfterKeepaliveCommit","Elapsed":2} {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage"} {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0357168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.035Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.035Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResetsOpenAI403CounterForZeroUsage","Elapsed":0} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.036Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.036Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.036Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":101,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.3-codex\",\"upstream_model\":\"gpt-5.3-codex\"}\n"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_APIKeyUsesResponsesInputTokens","Elapsed":0} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported"} {"Time":"2026-09-12T11:38:40.0362201+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0440504+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope"} {"Time":"2026-09-12T11:38:40.0440504+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":401,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/401_missing_responses_write_scope","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":403,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_missing_responses_write_scope","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":403,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/403_html_proxy_page","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"=== RUN TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"original_model\":\"claude-opus-4-1\",\"normalized_model\":\"claude-opus-4-1\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth fallback to local tiktoken estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":202,\"upstream_status\":404,\"estimated_input_tokens\":6,\"upstream_model\":\"gpt-5.4\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported/404_input_tokens_unsupported","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported","Output":"--- PASS: TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardCountTokensAsAnthropic_OAuthFallsBackWhenPlatformEndpointUnsupported","Elapsed":0.01} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Output":"=== RUN TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.044Z\",\"msg\":\"openai count_tokens: oauth local tiktoken fallback failed, using minimum estimate\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":303,\"upstream_status\":401,\"estimated_input_tokens\":1,\"upstream_model\":\"gpt-5\",\"error\":\"unexpected end of JSON input\"}\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Output":"--- PASS: TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIOAuthInputTokensFallbackUsesMinimumWhenEstimateFails","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/simple_text_input","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/instructions_plus_tool_schema","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output","Output":"=== RUN TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples/input_parts_and_tool_output","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Output":"--- PASS: TestEstimateOpenAIInputTokens_RequestSamples (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_RequestSamples","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Output":"=== RUN TestOpenAIInputTokensEncodingForModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-5\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-5 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-5.3-codex","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-4o-mini\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-4o-mini (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4o-mini","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-4.1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-4.1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4.1","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-4-turbo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-4-turbo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-4-turbo","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo","Output":"=== RUN TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel/gpt-3.5-turbo","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Output":"--- PASS: TestOpenAIInputTokensEncodingForModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInputTokensEncodingForModel","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Output":"=== RUN TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Output":" openai_gateway_count_tokens_test.go:314: OPENAI_API_KEY not set\n"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Output":"--- SKIP: TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"skip","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestEstimateOpenAIInputTokens_CompareWithOpenAIAPI","Elapsed":0} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries"} {"Time":"2026-09-12T11:38:40.0445593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Output":"=== RUN TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Output":"--- PASS: TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesAtCompleteEventBoundaries","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Output":"=== RUN TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Output":"--- PASS: TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughKeepsPreamblePendingUntilFirstOutputBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Output":"=== RUN TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Output":"--- PASS: TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFlushesTerminalEventAtEOFWithoutBlankLine","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Output":"=== RUN TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Output":"--- PASS: TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedBeforeOutputCanStillFailOverWithoutFlush","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Output":"=== RUN TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Output":"--- PASS: TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNonRetryableFailedBeforeOutputFlushesAtBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Output":"=== RUN TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Output":"--- PASS: TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorTerminatesBeforeDone","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Output":"=== RUN TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBareErrorDrainsAuthoritativeFailedUsage","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Output":"=== RUN TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughFailedAfterOutputFlushesAtBoundaryAndKeepsUsage","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Output":"=== RUN TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI passthrough] Client disconnected during streaming, continue draining upstream for usage: account=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughClientDisconnectStillDrainsTerminalUsage","Elapsed":0} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual"} {"Time":"2026-09-12T11:38:40.0450682+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Output":"=== RUN TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI passthrough] 流读取异常中断: account=1 request_id= err=upstream read failed\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponsePassthrough\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_passthrough.go:2232\\ngithub.com/Wei-Shaw/sub2api/internal/service.runPassthroughFlushTest\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_passthrough_flush_test.go:95\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_passthrough_flush_test.go:277\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Output":"--- PASS: TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughScannerErrorFlushesWrittenResidual","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Output":"=== RUN TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Output":"--- PASS: TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughNamespaceRestoreErrorFlushesWrittenResidualOnce","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Output":"=== RUN TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI passthrough] Client disconnected during streaming, continue draining upstream for usage: account=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Output":"--- PASS: TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughBlankWriteFailureDoesNotFlushAndStillDrainsUsage","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/disabled_group_rejects_before_upstream","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5151 name=openai-image-controls type=apikey model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling/allowed_group_keeps_image_billing","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ImageIntentPreservesGateAndBilling","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_RejectsNilInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_RejectsNilInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_RejectsNilInput","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ZeroUsageStillWritesUsageLog","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0,\"account_nil\":false,\"is_apikey_or_bedrock\":true,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"openai_usage.pricing_missing_record_zero_cost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"billing_models\":[\"pricing-missing-test-model\"],\"requested_model\":\"\",\"mapped_model\":\"\",\"upstream_model\":\"\",\"api_key_id\":1002,\"account_id\":3002,\"error\":\"calculate OpenAI usage cost failed for billing models pricing-missing-test-model: pricing not found for model: pricing-missing-test-model\"}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_MissingPricingRecordsZeroCostUsageLog","Elapsed":0} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0,\"account_nil\":false,\"is_apikey_or_bedrock\":true,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.045Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0455783+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.045Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesUserSpecificGroupRate","Elapsed":0} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PeakRateAffectsTokenModeImageOutputTokens","Elapsed":0} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesPricingAt","Elapsed":0} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_TimePricingUsesExplicitPricingAt","Elapsed":0} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"} {"Time":"2026-09-12T11:38:40.0461449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-flash\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/peak","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-flash\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-flash/off_peak","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-pro\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/peak","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"customer-chat\",\"error\":\"pricing not found for model: customer-chat\"}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: deepseek-v4-pro\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel/deepseek-v4-pro/off_peak","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DeepSeekAccountStatsUsesRequestPricingAtAndUpstreamModel","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_IncludesEndpointMetadata","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"get user group rate failed, fallback to group default: user=2002 group=12 err=db unavailable\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway.test\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*userGroupRateResolver).Resolve\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/user_group_rate_resolver.go:93\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ResolveUserGroupRateMultiplier\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:123\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:202\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/servi"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"ce/openai_gateway_record_usage_test.go:687\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateOnResolverError","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToGroupDefaultRateWhenResolverMissing","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateUsageLogSkipsBilling","Elapsed":0} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.046Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0466741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.046Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_DuplicateBillingKeySkipsBillingWithRepo","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"Create usage log failed: usage log batch state uncertain\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.writeUsageLogBestEffort\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/gateway_usage_billing.go:595\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:514\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_record_usage_test.go:821\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsWhenUsageLogCreateReturnsError","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"Create usage log failed: context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.writeUsageLogBestEffort\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/gateway_usage_billing.go:595\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:514\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_record_usage_test.go:846\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsageLogWriteErrorDoesNotSkipBilling","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"Create usage log failed: context deadline exceeded\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.writeUsageLogBestEffort\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/gateway_usage_billing.go:595\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).RecordUsage\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_usage.go:514\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_record_usage_test.go:883\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingUsesDetachedContext","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingRepoUsesDetachedContext","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingFingerprintIncludesRequestPayloadHash","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.0001265,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.000115,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesFallbackRequestIDForBillingAndUsageLog","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PrefersClientRequestIDOverUpstreamRequestID","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_WSModePrefersUpstreamRequestIDOverClientRequestID","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GeneratesRequestIDWhenAllSourcesMissing","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyBalanceLow: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"is_subscription\":false,\"actual_cost\":0.00008800000000000001,\"user_nil\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"slog\",\"msg\":\"notifyAccountQuota: skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"total_cost\":0.00008,\"account_nil\":false,\"is_apikey_or_bedrock\":false,\"service_nil\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillingErrorWritesUnsettledUsageLog","Elapsed":0} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0471868+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UpdatesAPIKeyQuotaWhenConfigured","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ClampsActualInputTokensToZero","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GPT56SeparatesCacheWriteForBillingAndStats","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.047Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4-2026-03-05\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingDisabledWhenGroupAndAccountOff","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_Gpt54LongContextBillingEnabledPerAccount","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_off","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_off_account_on","Elapsed":0} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0476966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.047Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows/group_on_account_on","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupOrAccountLongContextAllows","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: grok-4.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_on_applies_the_official_ladder","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: grok-4.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly/group_off_keeps_the_base_card","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokLongContextFollowsGroupToggleOnly","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_out_overrides_stale_enabled_shadow","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.4-2026-03-05 -\u003e gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting/parent_opt_in_overrides_stale_disabled_shadow","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SparkShadowUsesCurrentParentBillingSetting","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierPriorityUsesFastPricing","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierFlexHalvesCost","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Output":"=== RUN TestNormalizeOpenAIServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority","Output":"=== RUN TestNormalizeOpenAIServiceTier/fast_maps_to_priority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority","Output":"--- PASS: TestNormalizeOpenAIServiceTier/fast_maps_to_priority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/fast_maps_to_priority","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved","Output":"=== RUN TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved","Output":"--- PASS: TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/openai_official_tiers_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored","Output":"=== RUN TestNormalizeOpenAIServiceTier/invalid_ignored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored","Output":"--- PASS: TestNormalizeOpenAIServiceTier/invalid_ignored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier/invalid_ignored","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Output":"--- PASS: TestNormalizeOpenAIServiceTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIServiceTier","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Output":"=== RUN TestExtractOpenAIServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Output":"--- PASS: TestExtractOpenAIServiceTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTier","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Output":"=== RUN TestExtractOpenAIServiceTierFromBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Output":"--- PASS: TestExtractOpenAIServiceTierFromBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIServiceTierFromBody","Elapsed":0} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048206+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UsesRequestedModelAndUpstreamModelMetadataFields","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PersistsRequestedReasoningEffort","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-terra\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesChannelMappedUpstreamModel","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-terra\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_PreservesLoopedChannelAndAccountUpstreamModel","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsMappedRequestsUsingRequestedModel","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedDoesNotOverrideBillingModelWhenUnmapped","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelMappedOverridesBillingModelWhenMapped","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/upstream_uses_mapped_billing_model","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource/requested_overrides_mapped_billing_model","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ResponsesMappedBillingModelHonorsBillingModelSource","Elapsed":0} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias"} {"Time":"2026-09-12T11:38:40.048716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt5.5\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_BillsCompactOpenAIModelAlias","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FallsBackToUpstreamModelWhenPrimaryUnpriceable","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"openai_usage.pricing_missing_record_zero_cost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"billing_models\":[\"not-priceable-alias\"],\"requested_model\":\"\",\"mapped_model\":\"\",\"upstream_model\":\"\",\"api_key_id\":10,\"account_id\":30,\"error\":\"calculate OpenAI usage cost failed for billing models not-priceable-alias: pricing not found for model: not-priceable-alias\"}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_UnpricedTokenModelFallsBackToZeroCostUsageLog","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.048Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SubscriptionBillingSetsSubscriptionFields","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.1\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[SIMPLE MODE] Usage recorded (not billed): user=2000, tokens=15\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_SimpleModeSkipsBillingAfterPersist","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageOnlyUsageStillPersists","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_EmptyImageSizeDefaultsBeforeBillingAndPersistence","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_OutputImageSizeWinsBeforeBillingAndPersistence","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageUsesPerImageBillingEvenWithUsageTokens","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierPreservesExistingBehavior","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageSharedMultiplierUsesUserGroupOverride","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ImageIndependentMultiplierUsesImageRate","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoUsesDefaultRateCard","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupImagePriceOverridesChannelImagePrice","Elapsed":0} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice"} {"Time":"2026-09-12T11:38:40.0492231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoPriceOverridesChannelImagePrice","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GroupVideoModelPriceOverridesFlatAndChannelPrice","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupImagePriceWhenAuthSnapshotOmitsIt","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_HydratesGroupVideoPriceWhenAuthSnapshotOmitsIt","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"grok-imagine-video\",\"error\":\"pricing not found for model: grok-imagine-video\"}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"slog\",\"msg\":\"failed to get model pricing from LiteLLM, using fallback\",\"service\":\"sub2api\",\"env\":\"test\",\"model\":\"grok-imagine-video\",\"error\":\"pricing not found for model: grok-imagine-video\"}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_GrokVideoWithTokenChannelPricingKeepsVideoMetadata","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndSharedMultiplier","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ChannelImageBillingUsesImageCountAndIndependentMultiplier","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"slog\",\"msg\":\"billing.service_tier_downgraded\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"request_id\":\"resp_service_tier_downgraded\",\"requested_tier\":\"priority\",\"response_tier\":\"default\",\"billed_tier\":\"default\",\"platform\":\"openai\",\"account_id\":3017}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierDowngradedByUpstreamResponse","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/oauth","Elapsed":0} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token"} {"Time":"2026-09-12T11:38:40.0497323+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.049Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.049Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling/setup-token","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_CodexDefaultEchoKeepsFastBilling","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.050Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.050Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ShadowUsesParentCredentialTierContract","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.050Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.050Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.6-sol\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_FreeOpenAIFastChargesStandard","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Output":"=== RUN TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Output":"--- PASS: TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGroupBillsOpenAIFastAtStandardRequiresOpenAIAccount","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"=== RUN TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.050Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:40.050Z\",\"logger\":\"stdlog\",\"msg\":\"[Billing] Using fallback pricing for model: gpt-5.4\",\"service\":\"sub2api\",\"env\":\"test\",\"legacy_stdlog\":true}\n"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Output":"--- PASS: TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceRecordUsage_ServiceTierNeverRaisedByUpstreamResponse","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNull\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNull (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNull","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullOnly","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNonNull\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNonNull (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNonNull","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_NoReasoningItems","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/compaction_summary","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction/unencrypted_compaction","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_Compaction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_Compaction","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_DropsWholeEncryptedItem","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoEncryptedIsNoop","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_NoInputIsNoop","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Output":"=== RUN TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Output":"--- PASS: TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAICrossModeFailoverReasoning_PreservesLargeIntegers","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Output":"=== RUN TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Output":"--- PASS: TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestTrimOpenAIEncryptedReasoningItems_ContentNullDropsBareSkeleton","Elapsed":0} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0502395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplay","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRequiresExplicitStoreFalse","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayKnownCompactMode","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Output":"=== RUN TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Output":"--- PASS: TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAPIKeyStoreFalseReasoningReplayRejectsEmptyEncryptedContent","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Output":"=== RUN TestNormalizeOpenAIParallelToolCallsWithoutTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Output":"--- PASS: TestNormalizeOpenAIParallelToolCallsWithoutTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/custom_compatible_endpoint_strips_none_placeholders","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/third-party_platform_keeps_other_reasoning_members","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/non-none_effort_is_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/official_OpenAI_API_key_preserves_none","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount/OpenAI_OAuth_preserves_none","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Output":"=== RUN TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Output":"--- PASS: TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterOpenAIResponsesNoneReasoningEffortForAccount_APIKeyAutomaticPassthroughPreservesRequest","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Output":"=== RUN TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Output":"--- PASS: TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIParallelToolCallsWithoutTools_KeepsResponsesLiteAdditionalTools","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayStripsCrossProviderArray","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningContentReplayKeepsPortableShapes","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBodyStripsReasoningContentOnlyForOpenAI","Elapsed":0} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Output":"=== RUN TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0507635+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Output":"--- PASS: TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_SlowEventsFlushOnceAtBoundaries","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Output":"=== RUN TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Output":"--- PASS: TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_DataQueuedButBlankDrainsFlushesOnce","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Output":"=== RUN TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Output":"--- PASS: TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BurstDoesNotIncreaseFlushes","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Output":"=== RUN TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Output":"--- PASS: TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CommentAndEOFOnlyFlushCompleteResidual","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Output":"=== RUN TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:40.051Z\",\"msg\":\"Upstream scan ended after terminal event: unexpected EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Output":"--- PASS: TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_TerminalReadErrorFlushesResidual","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Output":"=== RUN TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Output":"--- PASS: TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_OutputWithoutTerminalFlushesResidualWithoutFailover","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Output":"=== RUN TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Output":"--- PASS: TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_PreambleWithoutTerminalRemainsBufferedForFailover","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Output":"=== RUN TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Output":"--- PASS: TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CanceledAfterOutputFlushesResidualWithoutErrorEvent","Elapsed":0} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately"} {"Time":"2026-09-12T11:38:40.0513219+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Output":"=== RUN TestOpenAIResponseFlush_KeepaliveFlushesImmediately\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Output":"--- PASS: TestOpenAIResponseFlush_KeepaliveFlushesImmediately (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveFlushesImmediately","Elapsed":1} {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent"} {"Time":"2026-09-12T11:38:41.0518822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent","Output":"=== RUN TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent","Output":"--- PASS: TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent (1.25s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_KeepaliveDoesNotSplitOpenEvent","Elapsed":1.25} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/failed_at_EOF","Elapsed":0} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_synthesizes_failed_before_done","Elapsed":0} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/bare_error_forwards_following_failed_and_drains_terminal_usage","Elapsed":0} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary","Output":"=== RUN TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries/non-retryable_error_event_flushes_at_boundary","Elapsed":0} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Output":"--- PASS: TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_FailedAndErrorEventsFlushAtBoundaries","Elapsed":0} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Output":"=== RUN TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorFollowedByCompletedUsesCompletedTerminal","Elapsed":0} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Output":"=== RUN TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3022254+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Output":"--- PASS: TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_CompatibleAPIKeyDoesNotUseCodexBareErrorSynthesis","Elapsed":0} {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout"} {"Time":"2026-09-12T11:38:42.3028628+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout","Output":"=== RUN TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout","Output":"--- PASS: TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_RecentBareErrorAllowsCompletedBeforeIdleTimeout","Elapsed":1.2} {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed"} {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Output":"=== RUN TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout"} {"Time":"2026-09-12T11:38:43.5037855+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout","Output":"=== RUN TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/stream_interval_timeout","Elapsed":1} {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout"} {"Time":"2026-09-12T11:38:44.5040703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout","Output":"=== RUN TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed/first_output_timeout","Elapsed":1} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Output":"--- PASS: TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed (2.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_BareErrorTimeoutSynthesizesFailed","Elapsed":2} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Output":"=== RUN TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done","Output":"=== RUN TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done","Output":"--- PASS: TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/whitespace_around_done","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done","Output":"=== RUN TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done","Output":"--- PASS: TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics/invalid_JSON_before_done","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Output":"--- PASS: TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ReusedTypeKeepsSSEBytesAndTerminalSemantics","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Output":"=== RUN TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.504Z\",\"msg\":\"Client disconnected during streaming flush, continuing to drain upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Output":"--- PASS: TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponseFlush_ClientDisconnectStillDrainsUsage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_MergesHostedImageGenToolUsage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NonStreamingMergesImageGen","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_NoToolUsageUnchanged","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_BaseUsageHasImageTokensNoOverride","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/empty","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/whitespace","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/done","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/JSON_outer_whitespace","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/completed","Elapsed":0} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5044609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/response_done","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/failed","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/incomplete","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/cancelled","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/canceled","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/delta","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/invalid_JSON","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/terminal_with_trailing_garbage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/nonterminal_with_trailing_garbage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized","Output":"=== RUN TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics/type_whitespace_is_normalized","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Output":"--- PASS: TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamEventIsTerminalWithTypeMatchesExistingSemantics","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsLeavesNamespaceOnlyBodyUnchanged","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsRejectsTrailingData\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/trailing_garbage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document","Output":"=== RUN TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData/second_JSON_document","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Output":"--- PASS: TestAdaptOpenAIResponsesClientToolsRejectsTrailingData (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdaptOpenAIResponsesClientToolsRejectsTrailingData","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Output":"=== RUN TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Output":"--- PASS: TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClearOpenAIResponsesClientToolMappingRemovesStaleContextState","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"=== RUN TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5659 name= type=apikey model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5659,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Output":"--- PASS: TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsNonStreaming","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"=== RUN TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=6240 name= type=apikey model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":6240,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Output":"--- PASS: TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyPreservesCustomToolOutputContentParts","Elapsed":0} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"=== RUN TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5660 name= type=apikey model=gpt-5.4 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5050912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5660,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Output":"--- PASS: TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIPassthroughAPIKeyRestoresClientToolsStreaming","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/使用注入的_detector","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_为_nil_时返回默认_detector","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Output":"=== RUN TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector/service_未注入_detector_时返回默认_detector","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Output":"--- PASS: TestOpenAIGatewayService_GetCodexClientRestrictionDetector (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetCodexClientRestrictionDetector","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage","Output":"=== RUN TestOpenAIGatewayService_Forward_VersionGateMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Output":"=== RUN TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":0,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"codex_version_too_low\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_body_size\":25}\n"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Output":"--- PASS: TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/版本太低:返回带版本号的差异化文案","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Output":"=== RUN TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":0,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_body_size\":25}\n"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Output":"--- PASS: TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage/未命中官方:仍返回通用兜底文案","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage","Output":"--- PASS: TestOpenAIGatewayService_Forward_VersionGateMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_VersionGateMessage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"=== RUN TestLogCodexCLIOnlyDetection_NilSafety\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":0,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"test\"}\n"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Output":"--- PASS: TestLogCodexCLIOnlyDetection_NilSafety (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_NilSafety","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"=== RUN TestLogCodexCLIOnlyDetection_OnlyLogsRejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\",\"api_key_id\":2002}\n"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"api_key_id\":2002}\n"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Output":"--- PASS: TestLogCodexCLIOnlyDetection_OnlyLogsRejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_OnlyLogsRejected","Elapsed":0} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails"} {"Time":"2026-09-12T11:38:45.5056043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"=== RUN TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.505Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"api_key_id\":2002,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"203.0.113.42\",\"request_remote_addr\":\"172.18.0.1:54321\",\"request_user_agent\":\"codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.2\",\"request_prompt_cache_key_sha256\":\"a39ee25f645d9e4e\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown\",\"x-real-ip\":\"203.0.113.42\"},\"request_body_size\":133}\n"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Output":"--- PASS: TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Output":"=== RUN TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"OpenAI 上游返回 Instructions are required,已记录请求详情用于排查\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"account_name\":\"codex max套餐\",\"upstream_status_code\":400,\"upstream_error_message\":\"Instructions are required\",\"request_user_agent\":\"curl/8.0\",\"codex_official_client_match\":false,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"curl/8.0\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_prompt_cache_key_sha256\":\"8a020cacc7f0ecfa\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"curl/8.0\"},\"request_body_size\":139}\n"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Output":"--- PASS: TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_LogsRequestDetails","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Output":"=== RUN TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Output":"--- PASS: TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIInstructionsRequiredDebug_NonTargetErrorSkipped","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Output":"=== RUN TestIsOpenAITransientProcessingError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Output":"--- PASS: TestIsOpenAITransientProcessingError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAITransientProcessingError","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Output":"=== RUN TestIsOpenAIContextWindowError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Output":"--- PASS: TestIsOpenAIContextWindowError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIContextWindowError","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Output":"=== RUN TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Output":"--- PASS: TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITransientAndCapacityClassificationIgnoresEchoedJSON","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Output":"=== RUN TestShouldFailoverOpenAIUpstreamResponseContextWindow502\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Output":"--- PASS: TestShouldFailoverOpenAIUpstreamResponseContextWindow502 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFailoverOpenAIUpstreamResponseContextWindow502","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"=== RUN TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1001,\"final_model\":\"gpt-5.1-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"OpenAI 上游返回 Instructions are required,已记录请求详情用于排查\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1001,\"account_name\":\"codex max套餐\",\"upstream_status_code\":400,\"upstream_error_message\":\"Missing required parameter: 'instructions'\",\"request_user_agent\":\"codex_cli_rs/0.1.0\",\"codex_official_client_match\":true,\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"trace=1\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"codex_cli_rs/0.1.0\",\"request_content_type\":\"application/json\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.1-codex\",\"request_prompt_cache_key_sha256\":\"0be20a493c1428fd\",\"request_headers\":{\"content-type\":\"application/json\",\"openai-beta\":\"assistants=v2\",\"user-agent\":\"codex_cli_rs/0.1.0\"},\"request_body_size\":143}\n"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Output":"--- PASS: TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_LogsInstructionsRequiredDetails","Elapsed":0} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover"} {"Time":"2026-09-12T11:38:45.506115+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Output":"=== RUN TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1001,\"final_model\":\"gpt-5.1-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Output":"--- PASS: TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TransientProcessingErrorTriggersFailover","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Output":"=== RUN TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1001,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Output":"--- PASS: TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ModelCapacityErrorTriggersFailoverAndSameAccountRetry","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Output":"=== RUN TestCodexSnapshotBaseTime\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/nil_snapshot_uses_fallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/empty_updatedAt_uses_fallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Output":"=== RUN TestCodexSnapshotBaseTime/valid_updatedAt_wins\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Output":"--- PASS: TestCodexSnapshotBaseTime/valid_updatedAt_wins (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/valid_updatedAt_wins","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Output":"=== RUN TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Output":"--- PASS: TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime/invalid_updatedAt_uses_fallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Output":"--- PASS: TestCodexSnapshotBaseTime (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexSnapshotBaseTime","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Output":"=== RUN TestCodexResetAtRFC3339\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Output":"=== RUN TestCodexResetAtRFC3339/nil_reset_returns_nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Output":"--- PASS: TestCodexResetAtRFC3339/nil_reset_returns_nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/nil_reset_returns_nil","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Output":"=== RUN TestCodexResetAtRFC3339/positive_seconds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Output":"--- PASS: TestCodexResetAtRFC3339/positive_seconds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/positive_seconds","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Output":"=== RUN TestCodexResetAtRFC3339/negative_seconds_clamp_to_base\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Output":"--- PASS: TestCodexResetAtRFC3339/negative_seconds_clamp_to_base (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339/negative_seconds_clamp_to_base","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Output":"--- PASS: TestCodexResetAtRFC3339 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCodexResetAtRFC3339","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Output":"=== RUN TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_UsesSnapshotUpdatedAt","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Output":"=== RUN TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FreshAccountUsedPercentNotInverted_Issue2994","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Output":"=== RUN TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_FallbackToNowWhenUpdatedAtInvalid","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Output":"=== RUN TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_ClampNegativeResetSeconds","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Output":"=== RUN TestBuildCodexUsageExtraUpdates_NilSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_NilSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_NilSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Output":"=== RUN TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Output":"--- PASS: TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageExtraUpdates_WithoutNormalizedWindowFields","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Output":"=== RUN TestOpenAIRequestView_ExtractsRawScalars\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Output":"--- PASS: TestOpenAIRequestView_ExtractsRawScalars (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsRawScalars","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Output":"=== RUN TestOpenAIRequestView_ExtractsFieldsAfterLargeInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Output":"--- PASS: TestOpenAIRequestView_ExtractsFieldsAfterLargeInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ExtractsFieldsAfterLargeInput","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Output":"=== RUN TestOpenAIRequestView_KeepsFirstDuplicateField\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Output":"--- PASS: TestOpenAIRequestView_KeepsFirstDuplicateField (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsFirstDuplicateField","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Output":"=== RUN TestOpenAIRequestView_KeepsLenientPrefixExtraction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Output":"--- PASS: TestOpenAIRequestView_KeepsLenientPrefixExtraction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_KeepsLenientPrefixExtraction","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Output":"=== RUN TestOpenAIRequestView_DecodeKeepsFullMapBehavior\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Output":"--- PASS: TestOpenAIRequestView_DecodeKeepsFullMapBehavior (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_DecodeKeepsFullMapBehavior","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Output":"=== RUN TestOpenAIRequestView_ApplyPatches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Output":"--- PASS: TestOpenAIRequestView_ApplyPatches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatches","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Output":"=== RUN TestOpenAIRequestView_RejectsEscapedPatchPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Output":"--- PASS: TestOpenAIRequestView_RejectsEscapedPatchPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_RejectsEscapedPatchPath","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Output":"=== RUN TestOpenAIRequestView_ApplyPatchesDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Output":"--- PASS: TestOpenAIRequestView_ApplyPatchesDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_ApplyPatchesDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Output":"=== RUN TestOpenAIRequestView_HasPatches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Output":"--- PASS: TestOpenAIRequestView_HasPatches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestView_HasPatches","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"=== RUN TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"[OpenAI] Normalized reasoning.effort: minimal -\u003e none (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.506Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Output":"--- PASS: TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyMissingInstructionsKeepsLargeInputRaw","Elapsed":0} {"Time":"2026-09-12T11:38:45.506622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"=== RUN TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Normalized /responses image_generation tool payload\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Output":"--- PASS: TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_DecodedMutationKeepsLaterFieldDeletes","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/max_tokens_归一化为_max_output_tokens_并移除_prompt_cache_options","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Output":"=== RUN TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions/同时存在时保留_max_output_tokens_丢弃_max_tokens","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions","Output":"--- PASS: TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_NormalizesMaxTokensAndStripsPromptCacheOptions","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"=== RUN TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Model mapping applied: draw-alias -\u003e gpt-image-2 (account: openai-apikey, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"draw-alias\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Output":"--- PASS: TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MappedImageModelUsesImageGate","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"=== RUN TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4 -\u003e gpt-5.5 (account: openai-apikey, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesSetsBillingModelToMappedModel","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Output":"=== RUN TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesWithoutMappingKeepsRequestedBillingModel","Elapsed":0} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"=== RUN TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5071314+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Model mapping applied: gpt-5.4 -\u003e gpt-5.5 (account: openai-apikey, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai chat_completions: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5,\"original_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.5\",\"upstream_model\":\"gpt-5.5\",\"stream\":false,\"responses_shape\":false,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"afe45bd33058d42a\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextResponsesBillingModelMatchesChatCompletions","Elapsed":0} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Output":"=== RUN TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Output":"--- PASS: TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_TextDataImageDoesNotForceMapMarshal","Elapsed":0} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"=== RUN TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5 mapped_model=gpt-5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Output":"--- PASS: TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolBillingDoesNotForceFullDecode","Elapsed":0} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"=== RUN TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Normalized /responses image-only model request inbound_model=gpt-image-2 image_model=gpt-image-2 upstream_model=gpt-5.6-luna\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-image-2 mapped_model=gpt-5.6-luna account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Output":"--- PASS: TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageToolWithImageOnlyModelIsNormalized","Elapsed":0} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.507Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDoesNotDecodeBeforeError","Elapsed":0} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction"} {"Time":"2026-09-12T11:38:45.5076384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPRetryRecoveryDropsCompaction","Elapsed":0} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Output":"=== RUN TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Output":"--- PASS: TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexSparkRejectsEscapedInputImage","Elapsed":0} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"=== RUN TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5 mapped_model=gpt-5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Output":"--- PASS: TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_CodexBridgeInjectionSetsImageBilling","Elapsed":0} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPPreservesPreviousResponseIDForAPIKey","Elapsed":0} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"=== RUN TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5081497+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.3-codex-spark mapped_model=gpt-5.3-codex-spark account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.3-codex-spark\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_StripsImageGenerationToolForSparkAPIKey","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Output":"=== RUN TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Output":"--- PASS: TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedJSON","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Output":"=== RUN TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Output":"--- PASS: TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedImageType","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Output":"=== RUN TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Output":"--- PASS: TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyMayContainEmptyBase64InputImageSeesEscapedInputPrefix","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"=== RUN TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] Normalized /responses image-only model request inbound_model=gpt-image-2 image_model=gpt-image-2 upstream_model=gpt-5.6-luna\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-image-2 mapped_model=gpt-5.6-luna account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.508Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":6,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Output":"--- PASS: TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ImageOnlyModelKeepsSupportedVerbosity","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody/完整字段\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody/完整字段 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/完整字段","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody/缺失可选字段\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody/缺失可选字段 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/缺失可选字段","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Output":"=== RUN TestExtractOpenAIRequestMetaFromBody/空请求体\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody/空请求体 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody/空请求体","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Output":"--- PASS: TestExtractOpenAIRequestMetaFromBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIRequestMetaFromBody","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/优先读取_reasoning.effort","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/兼容_reasoning_effort","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/DeepSeek_V4_保留_max","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/旧模型仍将_max_归一化为_xhigh","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/minimal_归一化为空","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/缺失字段时从模型后缀推导","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody/未知后缀不返回","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBody","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Output":"=== RUN TestGetOpenAIRequestBodyMap_ParseError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Output":"--- PASS: TestGetOpenAIRequestBodyMap_ParseError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_ParseError","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Output":"=== RUN TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Output":"--- PASS: TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIRequestBodyMap_DoesNotWriteContextCache","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Output":"=== RUN TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Output":"--- PASS: TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIRequestBodyMap","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Output":"=== RUN TestSanitizeEmptyBase64InputImagesInOpenAIBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Output":"--- PASS: TestSanitizeEmptyBase64InputImagesInOpenAIBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeEmptyBase64InputImagesInOpenAIBody","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Output":"=== RUN TestIsolateOpenAISessionID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty","Output":"=== RUN TestIsolateOpenAISessionID/empty_raw_returns_empty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty","Output":"--- PASS: TestIsolateOpenAISessionID/empty_raw_returns_empty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/empty_raw_returns_empty","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Output":"=== RUN TestIsolateOpenAISessionID/deterministic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Output":"--- PASS: TestIsolateOpenAISessionID/deterministic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/deterministic","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result","Output":"=== RUN TestIsolateOpenAISessionID/different_apiKeyID_different_result\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result","Output":"--- PASS: TestIsolateOpenAISessionID/different_apiKeyID_different_result (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_apiKeyID_different_result","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result","Output":"=== RUN TestIsolateOpenAISessionID/different_raw_different_result\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result","Output":"--- PASS: TestIsolateOpenAISessionID/different_raw_different_result (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/different_raw_different_result","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars","Output":"=== RUN TestIsolateOpenAISessionID/format_is_16_hex_chars\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars","Output":"--- PASS: TestIsolateOpenAISessionID/format_is_16_hex_chars (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/format_is_16_hex_chars","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works","Output":"=== RUN TestIsolateOpenAISessionID/zero_apiKeyID_still_works\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works","Output":"--- PASS: TestIsolateOpenAISessionID/zero_apiKeyID_still_works (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID/zero_apiKeyID_still_works","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Output":"--- PASS: TestIsolateOpenAISessionID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsolateOpenAISessionID","Elapsed":0} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit"} {"Time":"2026-09-12T11:38:45.5086562+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"=== RUN TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5099,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5099,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5100,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"27ab57cd52a79bd0\"}\n"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:45.509Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5100,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Output":"--- PASS: TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardAsAnthropic_CapacityShedReturnsRequestScopedFailoverWithoutCommit","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Output":"=== RUN TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Output":"--- PASS: TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_NilContextSkipsTempUnschedulablePolicy","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_Priority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_Priority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_Priority","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Output":"=== RUN TestOpenAIGatewayService_ClientSessionHeaderPriority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Output":"--- PASS: TestOpenAIGatewayService_ClientSessionHeaderPriority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeaderPriority","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Output":"=== RUN TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Output":"--- PASS: TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexSessionIDKeepsReconnectHashStable","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Output":"=== RUN TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Output":"--- PASS: TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ClientSessionHeadersIgnorePerRequestIDs","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_UsesXXHash64","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_AttachesLegacyHashToContext","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Output":"=== RUN TestExtractOpenAIResponseIDFromJSONBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Output":"--- PASS: TestExtractOpenAIResponseIDFromJSONBytes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIResponseIDFromJSONBytes","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Output":"=== RUN TestExtractOpenAIUsage_CapturesImageInputTokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Output":"--- PASS: TestExtractOpenAIUsage_CapturesImageInputTokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_CapturesImageInputTokens","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Output":"=== RUN TestExtractOpenAIUsage_ReadsClineDataEnvelope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Output":"--- PASS: TestExtractOpenAIUsage_ReadsClineDataEnvelope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsClineDataEnvelope","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Output":"=== RUN TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Output":"--- PASS: TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_ReadsWrappedResponsesDataEnvelope","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Output":"=== RUN TestExtractOpenAIUsage_PreservesResponseUsagePriority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Output":"--- PASS: TestExtractOpenAIUsage_PreservesResponseUsagePriority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsage_PreservesResponseUsagePriority","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Output":"=== RUN TestOpenAIGatewayService_BindHTTPResponseAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Output":"--- PASS: TestOpenAIGatewayService_BindHTTPResponseAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BindHTTPResponseAccount","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/stateless_image_body_stays_unstuck","Elapsed":0} {"Time":"2026-09-12T11:38:45.5091814+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/prompt_cache_key_is_explicit","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body","Output":"=== RUN TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback/header_overrides_body","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback","Output":"--- PASS: TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateExplicitSessionHash_SkipsContentFallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHashWithFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHashWithFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHashWithFallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_ContentFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_ContentFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ContentFallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_ExplicitSignalWinsOverContent","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty","Output":"=== RUN TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty","Output":"--- PASS: TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GenerateSessionHash_EmptyBodyStillEmpty","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulable","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_ImageRateLimitSkipsOnlyImageRequests","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_FiltersUnschedulableWhenNoConcurrencyService","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyUnschedulableClearsSession","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyOutsideGroupClearsSession","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyUnschedulableClearsSession","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyOutsideGroupClearsSession","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_NoModelSupport\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_NoModelSupport (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoModelSupport","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorFallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoSlotFallbackWait","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_SetsStickyBinding","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyWaitPlan","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_StickyCapacitySpilloverKeepsBinding","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PrefersLowerLoad","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyExcludedFallback","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_StickyNonOpenAI","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_NoAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_NoAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_NoAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_NoCandidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_NoCandidates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_NoCandidates","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_AllFullWaitPlan","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_LoadBatchErrorNoAcquire","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_MissingLoadInfo","Elapsed":0} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed"} {"Time":"2026-09-12T11:38:45.5096914+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Output":"=== RUN TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Output":"--- PASS: TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountForModelWithExclusions_LeastRecentlyUsed","Elapsed":0} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed"} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Output":"=== RUN TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Output":"--- PASS: TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISelectAccountWithLoadAwareness_PreferNeverUsed","Elapsed":0} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout"} {"Time":"2026-09-12T11:38:45.510211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Output":"=== RUN TestOpenAIStreamingTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:46.510Z\",\"msg\":\"Stream data interval timeout: account=1 model=model interval=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Output":"--- PASS: TestOpenAIStreamingTimeout (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTimeout","Elapsed":1} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Output":"=== RUN TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Output":"--- PASS: TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextCanceledReturnsIncompleteErrorWithoutInjectingErrorEvent","Elapsed":0} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Output":"=== RUN TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Output":"--- PASS: TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReadErrorBeforeOutputReturnsFailover","Elapsed":0} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Output":"=== RUN TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:46.510Z\",\"msg\":\"openai.proxy_quarantined_stream_disconnect\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"proxy_id\":4698,\"account_id\":469801,\"until\":\"2026-09-12T03:48:46.510Z\",\"upstream_request_id\":\"rid-proxy-disconnect\",\"error\":\"http2: client connection lost\"}\n"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Output":"--- PASS: TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPostOutputDisconnectQuarantinesSharedProxyWithoutSameStreamFailover","Elapsed":0} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Output":"=== RUN TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:46.510Z\",\"msg\":\"Upstream scan ended after terminal event: unexpected EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Output":"--- PASS: TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTerminalAndClientCancellationDoNotQuarantineProxy","Elapsed":0} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputReturnsFailover","Elapsed":0} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputCapacityErrorReturnsFailover","Elapsed":0} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover"} {"Time":"2026-09-12T11:38:46.5100095+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputServerOverloadedCodeReturnsFailover","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Output":"=== RUN TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Output":"--- PASS: TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedBeforeOutputRateLimitUsesPoolRetryPolicy","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Output":"=== RUN TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Output":"--- PASS: TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedRateLimitDoesNotBlockAccountScheduling","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"=== RUN TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"--- PASS: TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingResponseFailedAfterOutputSanitizesVerboseResponseForClient","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Output":"=== RUN TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Output":"--- PASS: TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputPassesThrough","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"=== RUN TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"--- PASS: TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Output":"=== RUN TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Output":"--- PASS: TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleOnlyMissingTerminalReturnsFailover","Elapsed":0} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle"} {"Time":"2026-09-12T11:38:46.5105135+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Output":"=== RUN TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Output":"--- PASS: TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle (1.35s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPreambleKeepaliveUsesDownstreamIdle","Elapsed":1.35} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Output":"=== RUN TestOpenAIStreamingNormalizesTerminalOutputFromDeltas\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Output":"--- PASS: TestOpenAIStreamingNormalizesTerminalOutputFromDeltas (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputFromDeltas","Elapsed":0} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Output":"=== RUN TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Output":"--- PASS: TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingNormalizesTerminalOutputToEmptyArray","Elapsed":0} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Output":"=== RUN TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Output":"--- PASS: TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPolicyResponseFailedBeforeOutputPassesThrough","Elapsed":0} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Output":"=== RUN TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.862Z\",\"msg\":\"Client disconnected during streaming flush, continuing to drain upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Output":"--- PASS: TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingClientDisconnectDrainsUpstreamUsage","Elapsed":0} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError"} {"Time":"2026-09-12T11:38:47.8625943+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Output":"=== RUN TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Output":"--- PASS: TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingMissingTerminalEventReturnsIncompleteError","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Output":"=== RUN TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"OpenAI passthrough 上游流在未收到 [DONE] 时结束,疑似断流\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":1,\"upstream_request_id\":\"\"}\n"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Output":"--- PASS: TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughMissingTerminalEventReturnsIncompleteError","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"=== RUN TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"[OpenAI passthrough] 流读取异常中断: account=469804 request_id=rid-passthrough-proxy-disconnect err=unexpected EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai.proxy_quarantined_stream_disconnect\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"proxy_id\":4698,\"account_id\":469804,\"until\":\"2026-09-12T03:48:47.863Z\",\"upstream_request_id\":\"rid-passthrough-proxy-disconnect\",\"error\":\"http2: client connection lost\"}\n"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"[OpenAI passthrough] 流读取异常中断: account=469804 request_id=rid-passthrough-proxy-disconnect err=http2: client connection lost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Output":"--- PASS: TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughPostOutputDisconnectQuarantinesSharedProxy","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Output":"=== RUN TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedBeforeOutputReturnsFailover","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"=== RUN TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Output":"--- PASS: TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputAppliesPassthroughRule","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Output":"=== RUN TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Output":"--- PASS: TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughContextWindowResponseFailedBeforeOutputWithoutRulePassesThrough","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"=== RUN TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseFailedAfterOutputSanitizesVerboseResponseForClient","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Output":"=== RUN TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseDoneWithoutDoneMarkerStillSucceeds","Elapsed":0} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Output":"=== RUN TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8630978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Output":"--- PASS: TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughResponseIncompleteWithoutDoneMarkerStillSucceeds","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"=== RUN TestOpenAIStreamingTooLong\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"SSE line too long: account=2 max_size=65536 error=bufio.Scanner: token too long\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning.func13\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:452\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponseWithReasoning\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:808\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).handleStreamingResponse\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_response_handling.go:48\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIStreamingTooLong\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"/internal/service/openai_gateway_service_test.go:2737\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Output":"--- PASS: TestOpenAIStreamingTooLong (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingTooLong","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Output":"=== RUN TestOpenAINonStreamingContentTypePassThrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Output":"--- PASS: TestOpenAINonStreamingContentTypePassThrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypePassThrough","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Output":"=== RUN TestOpenAINonStreamingContentTypeDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Output":"--- PASS: TestOpenAINonStreamingContentTypeDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINonStreamingContentTypeDefault","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Output":"=== RUN TestOpenAIStreamingHeadersOverride\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Output":"--- PASS: TestOpenAIStreamingHeadersOverride (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingHeadersOverride","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Output":"=== RUN TestOpenAIStreamingReuseScannerBufferAndStillWorks\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Output":"--- PASS: TestOpenAIStreamingReuseScannerBufferAndStillWorks (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingReuseScannerBufferAndStillWorks","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Output":"=== RUN TestOpenAIInvalidBaseURLWhenAllowlistDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Output":"--- PASS: TestOpenAIInvalidBaseURLWhenAllowlistDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIInvalidBaseURLWhenAllowlistDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Output":"=== RUN TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Output":"--- PASS: TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledRequiresHTTPS","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Output":"=== RUN TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Output":"--- PASS: TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLDisabledAllowsHTTP","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Output":"=== RUN TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Output":"--- PASS: TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIValidateUpstreamBaseURLEnabledEnforcesAllowlist","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Output":"=== RUN TestOpenAIUpdateCodexUsageSnapshotFromHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Output":"--- PASS: TestOpenAIUpdateCodexUsageSnapshotFromHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpdateCodexUsageSnapshotFromHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/exact_v1_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/exact_v1_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/exact_v1_responses","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/compact_v1_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/compact_v1_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_v1_responses","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/compact_alias_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/compact_alias_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/compact_alias_responses","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/nested_suffix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/nested_suffix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/nested_suffix","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path","Output":"=== RUN TestOpenAIResponsesRequestPathSuffix/unrelated_path\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix/unrelated_path (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix/unrelated_path","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffix","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyPreservesCurrentCodexPayloadFields","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Output":"=== RUN TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Output":"--- PASS: TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompactRequestBodyDropsParallelToolCallsWithoutUsableTools","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Output":"=== RUN TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesCompactPath","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Output":"=== RUN TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughPreservesExplicitAPIKeyBetaHeader","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Output":"=== RUN TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Output":"--- PASS: TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestCompactForcesJSONAcceptForOAuth","Elapsed":0} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8636086+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthMessagesBridgeUsesSessionOnly","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Output":"=== RUN TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.863Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Output":"--- PASS: TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCompactPathForAPIKeyBaseURL","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"=== RUN TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Output":"--- PASS: TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestPreservesCodexIdentityHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_desktop_ua","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/mismatched_originator","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/tui_identity","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/official_originator_without_ua","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Output":"=== RUN TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility/third-party_ua","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOAuthOfficialClientOriginatorCompatibility","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Output":"=== RUN TestExtractOpenAISSEDataLine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Output":"=== RUN TestExtractOpenAISSEDataLine/标准格式\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Output":"--- PASS: TestExtractOpenAISSEDataLine/标准格式 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/标准格式","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Output":"=== RUN TestExtractOpenAISSEDataLine/无空格格式\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Output":"--- PASS: TestExtractOpenAISSEDataLine/无空格格式 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/无空格格式","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Output":"=== RUN TestExtractOpenAISSEDataLine/纯空数据\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Output":"--- PASS: TestExtractOpenAISSEDataLine/纯空数据 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/纯空数据","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Output":"=== RUN TestExtractOpenAISSEDataLine/非_data_行\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Output":"--- PASS: TestExtractOpenAISSEDataLine/非_data_行 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine/非_data_行","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Output":"--- PASS: TestExtractOpenAISSEDataLine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAISSEDataLine","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_AcceptsResponseAndChatUsageShapes","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Output":"=== RUN TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Output":"--- PASS: TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIUsageFromJSONBytes_IncludesGrokReasoningTokens","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Output":"=== RUN TestExtractCodexFinalResponse_SampleReplay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Output":"--- PASS: TestExtractCodexFinalResponse_SampleReplay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractCodexFinalResponse_SampleReplay","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Output":"=== RUN TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Output":"--- PASS: TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatSSEFrameParserResetsEventTypeAtFrameBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 1)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_apply_patch_in_response_body","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: update_plan -\u003e todowrite (total: 2)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/correct_update_plan_in_response_body","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name","Output":"=== RUN TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection/no_change_for_correct_tool_name","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrection","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Output":"=== RUN TestOpenAIGatewayService_ToolCorrectorInitialization\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 1)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Output":"--- PASS: TestOpenAIGatewayService_ToolCorrectorInitialization (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ToolCorrectorInitialization","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Astra_保留_max","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Sol_保留_max","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Terra_保留_max","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/Luna_后缀保留_max","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/DeepSeek_V4_保留_max","Elapsed":0} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh"} {"Time":"2026-09-12T11:38:47.8641325+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh","Output":"=== RUN TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels/旧_GPT_模型沿用_xhigh","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Output":"--- PASS: TestNormalizeOpenAIReasoningEffortForMaxCapableModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIReasoningEffortForMaxCapableModels","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortDowngradesMax","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_compact_降级","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_OAuth_普通请求保留","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/OpenAI_API_Key_compact_保留","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Output":"=== RUN TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility/Grok_OAuth_compact_保留","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Output":"--- PASS: TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICodexCompactReasoningEffortForAccountScopesCompatibility","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Output":"=== RUN TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":7,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Output":"--- PASS: TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesGPT56MaxEffort","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"=== RUN TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"[OpenAI] Model mapping applied: sol -\u003e gpt-5.6-sol (account: openai-apikey-mapped, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":9,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Output":"--- PASS: TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardPreservesMappedGPT56MaxEffort","Elapsed":0} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Output":"=== RUN TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8646451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":8,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Output":"--- PASS: TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthCompactDowngradesMaxEffort","Elapsed":0} {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire"} {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Output":"=== RUN TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8651496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.865Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":10,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Output":"--- PASS: TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthRemoteCompactV2PreservesResponsesWire","Elapsed":0} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Output":"=== RUN TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.865Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Output":"--- PASS: TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardAPIKeyRemoteCompactV2PreservesResponsesWire","Elapsed":0} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8657489+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/guardian","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/review","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/GUARDIAN","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/metadata_only","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/websocket_envelope_metadata","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_subagent","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/missing_parent","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_lineage","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/conflicting_subagent","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model","Output":"=== RUN TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage/ordinary_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Output":"--- PASS: TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIGuardianParentAffinity_RequiresUnambiguousReviewLineage","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/legacy","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers/advanced_sticky_weighted","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinitySelectsParentAccountAcrossSchedulers","Elapsed":0} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass"} {"Time":"2026-09-12T11:38:47.8662821+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_moved_out_of_group","Elapsed":0} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass/parent_excluded_after_upstream_failure","Elapsed":0} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityFallsBackWithoutCrossGroupOrFailoverBypass","Elapsed":0} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Output":"=== RUN TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/legacy","Elapsed":0} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced","Output":"=== RUN TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding/advanced","Elapsed":0} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentHashCollisionPreservesParentBinding","Elapsed":0} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy"} {"Time":"2026-09-12T11:38:47.8668045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/legacy","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced","Output":"=== RUN TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy/advanced","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Output":"--- PASS: TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GuardianParentAffinityHonorsRequiredPrivacy","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_unset","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:47.867Z\",\"logger\":\"slog\",\"msg\":\"profit_control_group_load_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":3904,\"error\":\"group repository unavailable\"}\n"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:47.867Z\",\"logger\":\"slog\",\"msg\":\"profit_control_group_load_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":3904,\"error\":\"group repository unavailable\"}\n"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/privacy_policy_lookup_error_fails_closed","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy/different_group","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseHonorsGroupAndRequiredPrivacy","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Output":"=== RUN TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Output":"--- PASS: TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreviousResponseSimpleModeIgnoresGroupMembership","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice","Output":"=== RUN TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents/image_tool_choice","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Output":"--- PASS: TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_RejectsDisabledImageGenerationIntents","Elapsed":0} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses"} {"Time":"2026-09-12T11:38:47.8673157+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Output":"=== RUN TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Output":"--- PASS: TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_DisabledGroupAllowsTextOnlyResponses","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/disabled_group_skips_injection","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_skips_injection_by_default","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/enabled_group_injects_image_tool_when_bridge_enabled","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability/responses_lite_skips_hosted_image_bridge","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexImageInjectionRespectsGroupCapability","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Output":"=== RUN TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Output":"--- PASS: TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIBuildUpstreamRequestOpenAIPassthroughForwardsResponsesLiteHeader","Elapsed":0} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"=== RUN TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8678854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] Normalized /responses image_generation tool payload\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.867Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Output":"--- PASS: TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ExplicitImageToolWorksWithBridgeDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Stripped /responses image_generation tool for Codex client by account policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsExplicitImageTool","Elapsed":0} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Stripped /responses image_generation tool for Codex client by account policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/managed_forwarding","Elapsed":0} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"=== RUN TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Stripped /responses image_generation tool for Codex client by account policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5151 name=openai-image-controls type=apikey model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools/passthrough_forwarding","Elapsed":0} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Output":"--- PASS: TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_AccountPolicyStripsImageNamespaceTools","Elapsed":0} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"=== RUN TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Injected /responses image_generation tool for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Set /responses image_generation tool_choice=auto for Codex client\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8684002+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Output":"--- PASS: TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_ChannelBridgeOverrideEnablesCodexInjection","Elapsed":0} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.5 mapped_model=gpt-5.5 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeDoesNotInjectHostedToolAlongsideImageGenNamespace","Elapsed":0} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/flat_function","Elapsed":0} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction/nested_function","Elapsed":0} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesImageGenFunction","Elapsed":0} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"[OpenAI] Added Codex image_generation bridge instructions\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.868Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgePreservesExistingToolChoice","Elapsed":0} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests"} {"Time":"2026-09-12T11:38:47.8689117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"=== RUN TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.869Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Output":"--- PASS: TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForward_CodexBridgeSkipsCompactRequests","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/global_default_enables_bridge","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_true_overrides_disabled_global","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/channel_false_overrides_enabled_global","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/account_false_overrides_channel_and_global_true","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/nested_account_true_overrides_channel_false","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Output":"=== RUN TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence/non_openai_account_extra_is_ignored","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Output":"--- PASS: TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexImageGenerationBridgeOverridePrecedence","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Output":"=== RUN TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Output":"--- PASS: TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_NonStreaming","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Output":"=== RUN TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Output":"--- PASS: TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_Streaming","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Output":"=== RUN TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Output":"--- PASS: TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceHandleResponsesImageOutputs_StreamingPassthrough","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Output":"=== RUN TestResolveOpenAIImageIntentHintCachesTrueAndFalse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Output":"=== RUN TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Output":"--- PASS: TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/true","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known","Output":"=== RUN TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known","Output":"--- PASS: TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse/false_is_known","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Output":"--- PASS: TestResolveOpenAIImageIntentHintCachesTrueAndFalse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintCachesTrueAndFalse","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Output":"=== RUN TestResolveOpenAIImageIntentHintUsesHandlerSeed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Output":"--- PASS: TestResolveOpenAIImageIntentHintUsesHandlerSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintUsesHandlerSeed","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesCanonicalAcrossFailover","Elapsed":0} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image"} {"Time":"2026-09-12T11:38:47.86942+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/text_to_image","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal/image_to_text","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentKeepsCompactMappingAttemptLocal","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentInvalidationDoesNotPolluteCanonical","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentMappedBodyStartsUnknownThenSeedsCanonical","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/oauth_sanitize_fast_policy_and_reasoning","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten","Output":"=== RUN TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations/namespace_flatten","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Output":"--- PASS: TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIPassthroughImageIntentReusesAcrossInvariantMutations","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Output":"=== RUN TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects","Output":"=== RUN TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects","Output":"--- PASS: TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/text_to_image_rejects","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"=== RUN TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.869Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=5151 name=openai-image-controls type=apikey model=gpt-image-2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.869Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5151,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Output":"--- PASS: TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal/image_to_text_reaches_upstream","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Output":"--- PASS: TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServicePassthroughCompactImageIntentIsAttemptLocal","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Output":"=== RUN TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Output":"--- PASS: TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintExcludesWebSocketAndUnknownTransport","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Output":"=== RUN TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Output":"--- PASS: TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageIntentHintConcurrentRequestsAreIsolated","Elapsed":0} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize"} {"Time":"2026-09-12T11:38:47.8699245+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Output":"=== RUN TestDetectOpenAIImageResultSize\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Output":"--- PASS: TestDetectOpenAIImageResultSize (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIImageResultSize","Elapsed":0.02} {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions"} {"Time":"2026-09-12T11:38:47.8851681+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.8972309+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.897Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.8972309+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.897Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUsesDecodedOutputDimensions","Elapsed":0.01} {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions"} {"Time":"2026-09-12T11:38:47.897952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9095738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.909Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9095738+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.909Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingUsesDecodedOutputDimensions","Elapsed":0.01} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Output":"=== RUN TestBackfillOpenAIImagesB64JSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/开关关闭时原样返回","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/缺少_b64_json_且有_url_时下载回填并保留_url","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_为空串时同样回填","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/b64_json_已有值时不下载","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/多项混合时只回填缺失项","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/data_URL_直接取载荷不下载","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/客户端显式要求_url_时不回填","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=download image: unexpected status 404\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载非_2xx_时保留原样","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=download image: content is not an allowed image format\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/下载内容不是图片时保留原样","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头未声明图片类型但字节嗅探为图片时回填","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=download image: content is not an allowed image format\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/响应头声明图片但字节不是图片时保留原样","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Output":"=== RUN TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=invalid image url: invalid url scheme: ftp\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON/非_http(s)_协议的_url_不下载","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Output":"=== RUN TestBackfillOpenAIImagesB64JSON_DownloadRequestShape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON_DownloadRequestShape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_DownloadRequestShape","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"=== RUN TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: localhost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: Foo.LocalHost\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 127.0.0.1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 127.0.0.1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: ::1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 10.0.0.5\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 172.16.0.9\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 192.168.1.10\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 169.254.169.254\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: 0.0.0.0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: fe80::1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images b64_json backfill skipped account_id=7 index=0 err=image url host is not allowed: ::ffff:127.0.0.1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_RejectsPrivateHosts","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Output":"=== RUN TestBackfillOpenAIImagesB64JSON_NonObjectBodies\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Output":"--- PASS: TestBackfillOpenAIImagesB64JSON_NonObjectBodies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBackfillOpenAIImagesB64JSON_NonObjectBodies","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyBackfillsB64JSONFromURL","Elapsed":0} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.910Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9105516+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyLeavesURLOnlyResponseWhenDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse"} {"Time":"2026-09-12T11:38:47.9110526+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse","Output":"=== RUN TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_PreservesValidJSONResponse","Elapsed":0.01} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Output":"=== RUN TestOpenAIImagesJSONKeepalive_DisabledIsNoop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_DisabledIsNoop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DisabledIsNoop","Elapsed":0} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Output":"=== RUN TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_FastErrorPreservesStatus","Elapsed":0} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON"} {"Time":"2026-09-12T11:38:47.9163496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON","Output":"=== RUN TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_LateErrorRemainsJSON","Elapsed":0.01} {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection"} {"Time":"2026-09-12T11:38:47.9230959+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection","Output":"=== RUN TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_DoesNotBlockFailoverDetection","Elapsed":0.01} {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid"} {"Time":"2026-09-12T11:38:47.929425+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid","Output":"=== RUN TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_KeepsOAuthNonStreamResponseValid","Elapsed":0.02} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards"} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Output":"=== RUN TestOpenAIImagesJSONKeepaliveWriter_NilGuards\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Output":"--- PASS: TestOpenAIImagesJSONKeepaliveWriter_NilGuards (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepaliveWriter_NilGuards","Elapsed":0} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver"} {"Time":"2026-09-12T11:38:47.9498343+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"=== RUN TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.955Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.955Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":22,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Output":"--- PASS: TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesJSONKeepalive_HeartbeatBeforeForwardStillFailsOver","Elapsed":0.01} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSON","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEdit","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Output":"=== RUN TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Output":"--- PASS: TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_JSONEditIncludesInputImageURLs","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Output":"=== RUN TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Output":"--- PASS: TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesRequestModerationBody_MultipartEditIncludesUploadsInMemory","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1024","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1536x1024","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024x1536","Elapsed":0} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9551608+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x2048","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2048x1152","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/3840x2160","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2160x3840","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1024X768","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/1280x768","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1440","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/2560x1600","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes/auto","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_NormalizesOfficialAndCustomSizes","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/2048x1153","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/4096x1024","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/3840x1024","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/512x512","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/invalid","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough/999999999999999999999999999x2","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_UnknownSizesDoNotBlockPassthrough","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_LegacyImageModelUnknownSizePassthrough","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_MultipartEditWithMaskAndNativeOptions","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_PromptOnlyDefaultsRemainBasic","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_ExplicitSizeRequiresNativeCapability","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_RejectsNonImageModel","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-image-quality","Elapsed":0} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit"} {"Time":"2026-09-12T11:38:47.9556838+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels/grok-imagine-edit","Elapsed":0} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_AllowsGrokImageModels","Elapsed":0} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Output":"=== RUN TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Output":"--- PASS: TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceParseOpenAIImagesRequest_JSONEditURLs","Elapsed":0} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Output":"=== RUN TestCollectOpenAIImagePointers_RecognizesDirectAssets\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Output":"--- PASS: TestCollectOpenAIImagePointers_RecognizesDirectAssets (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagePointers_RecognizesDirectAssets","Elapsed":0} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Output":"=== RUN TestResolveOpenAIImageBytes_PrefersInlineBase64\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Output":"--- PASS: TestResolveOpenAIImageBytes_PrefersInlineBase64 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIImageBytes_PrefersInlineBase64","Elapsed":0} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Output":"=== RUN TestNewOpenAIImageStatusError_UsesProvidedReadLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Output":"--- PASS: TestNewOpenAIImageStatusError_UsesProvidedReadLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIImageStatusError_UsesProvidedReadLimit","Elapsed":0} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit"} {"Time":"2026-09-12T11:38:47.9561972+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Output":"=== RUN TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Output":"--- PASS: TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUpstreamErrorBodyReadLimitForConfig_RespectsDiagnosticLimit","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Output":"=== RUN TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Output":"--- PASS: TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_OAuthSupportsNative","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Output":"=== RUN TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Output":"--- PASS: TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_SetupTokenSupportsNative","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Output":"=== RUN TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Output":"--- PASS: TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIImageCapability_EmptyRequirementDoesNotRejectGrok","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_APIKey_默认兼容_chat、embeddings_和_alpha_search","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OpenAI_OAuth_默认仅兼容_chat","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/alpha_search_允许_OpenAI_OAuth/PAT_与_APIKey_账号,拒绝_Grok","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表支持同时声明_chat_和_embeddings","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式列表只声明_chat_时不支持_embeddings","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/OAuth_显式列表沿用_chat_能力放行_alpha_search","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/显式_map_支持单独关闭_chat_并开启_embeddings","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities({})与未配置一致,不排除_OAuth_文本调度","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]any)与未配置一致,不排除_OAuth_文本调度","Elapsed":0} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9567073+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9599221+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/空_openai_capabilities([]string)与未配置一致,不排除_OAuth_文本调度","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/非空但全_false_的_map_仍按显式禁用处理,不默认放行","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/类型异常(字符串)仍视为已配置但不含能力,不默认放行","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/未知能力不应默认放行","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:未探测的_APIKey_默认放行","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认不支持的_APIKey_被排除","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:探测确认支持的_APIKey_放行","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:force_chat_completions_覆盖排除_APIKey","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:OAuth_账号不受探测标记影响","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验","Output":"=== RUN TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability/responses_能力:仍需通过_chat_completions_配置集校验","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Output":"--- PASS: TestAccountSupportsOpenAIEndpointCapability (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountSupportsOpenAIEndpointCapability","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Output":"=== RUN TestBuildOpenAIImagesURL_HandlesVersionedBaseURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Output":"--- PASS: TestBuildOpenAIImagesURL_HandlesVersionedBaseURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesURL_HandlesVersionedBaseURL","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.956Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.956Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthPassesNAndReturnsAllImages","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/valid_tool_usage_takes_atomic_precedence","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/absent","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/malformed_field","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/fractional_field","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/negative_field","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/overflow_field","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/incomplete_object","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback/hostile_huge_exponent","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_ToolUsagePrecedenceAndFallback","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Output":"=== RUN TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Output":"--- PASS: TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIImagesSSEUsageBytes_MalformedCompletedDoesNotOverrideUsage","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthUpstreamHTTPErrorSurfacesRealError","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamModerationBlockedReturnsClientError","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":21,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthNonStreamServerErrorReturnsFailoverBeforeFlush","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":22,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuth429CarriesSameAccountRetryWindow","Elapsed":0} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover"} {"Time":"2026-09-12T11:38:47.9604306+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Output":"=== RUN TestOpenAIImagesOAuthBodyReadTransportErrorFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadTransportErrorFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadTransportErrorFailover","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/context_canceled","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/response_too_large","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error","Output":"=== RUN TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified/semantic_error","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Output":"--- PASS: TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthBodyReadErrorsNotMisclassified","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Output":"=== RUN TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Output":"--- PASS: TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesOAuthTransportErrorAfterDownstreamWriteDoesNotFailover","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/unexpected_EOF","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/connection_reset_by_peer","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/broken_pipe","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection","Output":"=== RUN TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings/use_of_closed_network_connection","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Output":"--- PASS: TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldClassifyOpenAIUpstreamStreamReadErrorTransportStrings","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":22,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamServerErrorAfterFlushDoesNotFailover","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/invalid_request","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/content_policy","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error","Output":"=== RUN TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable/rate_limit_remains_distinct_from_server_error","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Output":"--- PASS: TestOpenAIImagesSSEClientErrorsAreNotRetryable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIImagesSSEClientErrorsAreNotRetryable","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyGenerationUsesConfiguredV1BaseURL","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-1 upstream_model=gpt-image-1 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyAccessStateUsesTypedFailover","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamJSONResponseBillsImage","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamRawJSONEventStreamFallbackBillsImage","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.960Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamMultilineSSEDataBillsImage","Elapsed":0} {"Time":"2026-09-12T11:38:47.9609812+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Output":"=== RUN TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Output":"--- PASS: TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIImagesBillableCountFromJSONBytes_CompletedEvent","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/edits account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyEditUsesConfiguredV1BaseURL","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":2,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingTransformsEvents","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images stream client disconnected, continue draining upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_APIKeyStreamingDrainsAfterClientDisconnect","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/edits account_type=oauth uploads=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":3,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsMultipartUsesResponsesAPI","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/edits account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.961Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthEditsStreamingTransformsEvents","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_PassesThroughNForMultiImageModels","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_ForcesImageToolChoice","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_DoesNotPassNForDallE3","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_StripsInputFidelity","Elapsed":0} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt"} {"Time":"2026-09-12T11:38:47.9614866+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Output":"=== RUN TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Output":"--- PASS: TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIImagesResponsesRequest_RequiresVerbatimUserPrompt","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Output":"=== RUN TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Output":"--- PASS: TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_FallsBackToOutputItemDone","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Output":"=== RUN TestCollectOpenAIImagesFromResponsesBody_MultilineSSE\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Output":"--- PASS: TestCollectOpenAIImagesFromResponsesBody_MultilineSSE (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIImagesFromResponsesBody_MultilineSSE","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesOutputItemDoneFallback","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingHandlesMultilineSSE","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"=== RUN TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=oauth uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":9,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images stream client disconnected, continue draining upstream for billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Output":"--- PASS: TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardImages_OAuthStreamingDrainsAfterClientDisconnect","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Output":"=== RUN TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Output":"--- PASS: TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_NonStreamDetachesUpstreamContext","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Output":"=== RUN TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.962Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 upstream_model=gpt-image-2 endpoint=/v1/images/generations account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Output":"--- PASS: TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIImagesAPIKey_StreamKeepsDetachedUpstreamContext","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Output":"=== RUN TestLiveCapabilityOnlyAllowsOpenAIOAuth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Output":"--- PASS: TestLiveCapabilityOnlyAllowsOpenAIOAuth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCapabilityOnlyAllowsOpenAIOAuth","Elapsed":0} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy"} {"Time":"2026-09-12T11:38:47.9620062+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Output":"=== RUN TestLiveCreateFailoverUsesExistingOpenAIPolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Output":"--- PASS: TestLiveCreateFailoverUsesExistingOpenAIPolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLiveCreateFailoverUsesExistingOpenAIPolicy","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"=== RUN TestNormalizeOpenAIMessagesDispatchModelConfig\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"=== PAUSE TestNormalizeOpenAIMessagesDispatchModelConfig\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"=== RUN TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"=== PAUSE TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Output":"=== RUN TestMode1CodexSemanticEquivalence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Output":"=== RUN TestMode1CodexSemanticEquivalence/string_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Output":"--- PASS: TestMode1CodexSemanticEquivalence/string_input (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/string_input","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Output":"=== RUN TestMode1CodexSemanticEquivalence/text_parts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Output":"--- PASS: TestMode1CodexSemanticEquivalence/text_parts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/text_parts","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Output":"=== RUN TestMode1CodexSemanticEquivalence/reasoning_replay_metadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Output":"--- PASS: TestMode1CodexSemanticEquivalence/reasoning_replay_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/reasoning_replay_metadata","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Output":"=== RUN TestMode1CodexSemanticEquivalence/system_promotion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Output":"--- PASS: TestMode1CodexSemanticEquivalence/system_promotion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/system_promotion","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Output":"=== RUN TestMode1CodexSemanticEquivalence/tool_schema\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Output":"--- PASS: TestMode1CodexSemanticEquivalence/tool_schema (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_schema","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Output":"=== RUN TestMode1CodexSemanticEquivalence/tool_role_result\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Output":"--- PASS: TestMode1CodexSemanticEquivalence/tool_role_result (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/tool_role_result","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Output":"=== RUN TestMode1CodexSemanticEquivalence/call_pair\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Output":"--- PASS: TestMode1CodexSemanticEquivalence/call_pair (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/call_pair","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Output":"=== RUN TestMode1CodexSemanticEquivalence/model_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Output":"--- PASS: TestMode1CodexSemanticEquivalence/model_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/model_alias","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Output":"=== RUN TestMode1CodexSemanticEquivalence/minimal_compatibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Output":"--- PASS: TestMode1CodexSemanticEquivalence/minimal_compatibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/minimal_compatibility","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Output":"=== RUN TestMode1CodexSemanticEquivalence/legacy_pro_mode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Output":"--- PASS: TestMode1CodexSemanticEquivalence/legacy_pro_mode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/legacy_pro_mode","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Output":"=== RUN TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Output":"--- PASS: TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence/unsupported_OAuth_budget","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Output":"--- PASS: TestMode1CodexSemanticEquivalence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1CodexSemanticEquivalence","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_text\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_text (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_text","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/dropped_turn","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_system\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_system (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_system","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_encrypted_reasoning","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_reference\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_reference (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_reference","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/wrong_call_id","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_result\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_result (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_result","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_tools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_tools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_tools","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/conflicting_legacy_tools","Elapsed":0} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association"} {"Time":"2026-09-12T11:38:47.9625159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/tool_without_association","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_malformed_tool","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lowered_reasoning","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_Astra_mode","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/changed_budget\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/changed_budget (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/changed_budget","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Output":"=== RUN TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss/lost_continuity","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Output":"--- PASS: TestMode1SemanticGuardStillRejectsActualLoss (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1SemanticGuardStillRejectsActualLoss","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Output":"=== RUN TestMode1GuardAcceptsActualCodexTransform\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Output":"--- PASS: TestMode1GuardAcceptsActualCodexTransform (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardAcceptsActualCodexTransform","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Output":"=== RUN TestMode1GuardRejectsInvalidJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Output":"--- PASS: TestMode1GuardRejectsInvalidJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1GuardRejectsInvalidJSON","Elapsed":0} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations"} {"Time":"2026-09-12T11:38:47.9630244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Output":"=== RUN TestMode1V3StandardWSSPoolSeparatesConversations\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Output":"--- PASS: TestMode1V3StandardWSSPoolSeparatesConversations (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3StandardWSSPoolSeparatesConversations","Elapsed":0} {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames"} {"Time":"2026-09-12T11:38:47.966662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"=== RUN TestMode1V3WSPassthroughAcceptsCompatibilityFrames\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9671926+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.967Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=72 model=gpt-5.2 previous_response_id=- first_message_type=text first_message_bytes=118\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9671926+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.967Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=72 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9671926+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.967Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":72,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=72 status_code=101 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=relay_start direction=- msg_type=text bytes=118 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=118 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" openai_mode1_v3_ws_test.go:91: \n","OutputType":"error"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \tError Trace:\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_mode1_v3_ws_test.go:91\n","OutputType":"error-continue"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \tError: \tReceived unexpected error:\n","OutputType":"error-continue"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \t \tfailed to get reader: received close frame: status = StatusPolicyViolation and reason = \"overlapping response.create is not supported\"\n","OutputType":"error-continue"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":" \tTest: \tTestMode1V3WSPassthroughAcceptsCompatibilityFrames\n","OutputType":"error-continue"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"--- FAIL: TestMode1V3WSPassthroughAcceptsCompatibilityFrames (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"fail","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1V3WSPassthroughAcceptsCompatibilityFrames","Elapsed":0} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"=== RUN TestNormalizeKnownOpenAICodexModelGPT6Astra\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.968717+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"--- PASS: TestNormalizeKnownOpenAICodexModelGPT6Astra (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.968Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=72 stage=relay_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModelGPT6Astra","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt5.6","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-high","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-max","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/gpt-5.6-2026-07-09","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Output":"=== RUN TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol/openai/gpt-5.6-max","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Output":"--- PASS: TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeKnownOpenAICodexModel_BareGPT56RoutesToSol","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Output":"=== RUN TestResolveOpenAIForwardModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family","Output":"=== RUN TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family","Output":"--- PASS: TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_messages_dispatch_model_for_known_claude_family","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family","Output":"=== RUN TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family","Output":"--- PASS: TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/uses_exact_messages_dispatch_model_for_unknown_claude_family","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_uses_messages_dispatch_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/nil_account_without_messages_dispatch_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_unknown_gpt_model_has_no_messages_dispatch_fallback","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_exact_mapping_overrides_messages_dispatch_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_wildcard_mapping_overrides_messages_dispatch_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model","Output":"=== RUN TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model","Output":"--- PASS: TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/account_passthrough_mapping_overrides_messages_dispatch_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_codex_spark_request_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5_request_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_gpt-5.5-pro_request_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact-spelled_gpt5.5_request_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_namespaced_gpt-5.5_request_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model","Output":"=== RUN TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model","Output":"--- PASS: TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/ordinary_compact_gpt-5.5_request_keeps_requested_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored","Output":"=== RUN TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored","Output":"--- PASS: TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel/whitespace-only_messages_dispatch_model_is_ignored","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Output":"--- PASS: TestResolveOpenAIForwardModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardModel","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Output":"=== RUN TestResolveOpenAICompactForwardModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/nil_account_keeps_original_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/missing_compact_mapping_keeps_original_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/exact_compact_mapping_overrides_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model","Output":"=== RUN TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model","Output":"--- PASS: TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/wildcard_compact_mapping_overrides_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged","Output":"=== RUN TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged","Output":"--- PASS: TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel/passthrough_compact_mapping_remains_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Output":"--- PASS: TestResolveOpenAICompactForwardModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAICompactForwardModel","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_uses_client-visible_model_before_ordinary_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/non-compact_uses_ordinary_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/compact_falls_back_to_ordinary_mapped_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/passthrough_ignores_ordinary_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping","Output":"=== RUN TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence/raw_chat_fallback_never_applies_compact_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Output":"--- PASS: TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIForwardMappedModels_CompactMappingPrecedence","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_OAuth_applies_Codex_alias_normalization","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/OpenAI_passthrough_ignores_ordinary_account_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases","Output":"=== RUN TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics/Grok_OAuth_does_not_inherit_OpenAI_Codex_aliases","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Output":"--- PASS: TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCanonicalOpenAIAccountSchedulingModelMatchesForwardSemantics","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Output":"=== RUN TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Output":"--- PASS: TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIErrorSchedulingModelPrefersActualUpstreamModel","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Output":"=== RUN TestNormalizeCodexModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Output":"--- PASS: TestNormalizeCodexModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeCodexModel","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Output":"=== RUN TestNormalizeOpenAIModelForUpstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_bare_GPT-5.6_alias_to_Sol","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_routes_provider-prefixed_GPT-5.6_alias_to_Sol","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_unknown_non_codex_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_invalid_gpt_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_normalizes_known_codex_alias","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_GPT-5.5_Pro_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/oauth_preserves_codex_auto_review_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_bare_GPT-5.6_alias","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_custom_compatible_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model","Output":"=== RUN TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream/apikey_preserves_official_non_codex_model","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Output":"--- PASS: TestNormalizeOpenAIModelForUpstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIModelForUpstream","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Output":"=== RUN TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Output":"--- PASS: TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUsageBillingModelCandidatesPreserveCodexAutoReviewModel","Elapsed":0} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache"} {"Time":"2026-09-12T11:38:47.969224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Output":"=== RUN TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Output":"--- PASS: TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListUsesStandardRequestAndIsolatesCodexCache","Elapsed":0} {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache"} {"Time":"2026-09-12T11:38:47.969734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Output":"=== RUN TestFetchOpenAIModelsListOAuthSharesManifestCache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Output":"--- PASS: TestFetchOpenAIModelsListOAuthSharesManifestCache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListOAuthSharesManifestCache","Elapsed":0} {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight"} {"Time":"2026-09-12T11:38:47.970239+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Output":"=== RUN TestFetchOpenAIModelsListCacheWindowsAndSingleflight\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Output":"--- PASS: TestFetchOpenAIModelsListCacheWindowsAndSingleflight (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListCacheWindowsAndSingleflight","Elapsed":0.02} {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag"} {"Time":"2026-09-12T11:38:47.9917776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Output":"=== RUN TestFetchOpenAIModelsListRevalidatesUpstreamETag\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Output":"--- PASS: TestFetchOpenAIModelsListRevalidatesUpstreamETag (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRevalidatesUpstreamETag","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]} (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[]}","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null} (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":null}","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{} (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{}","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}} (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":{}}","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]} (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[{}]}","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}","Output":"=== RUN TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]} (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses/{\"data\":[null]}","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Output":"--- PASS: TestFetchOpenAIModelsListEmptyAndMalformedResponses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListEmptyAndMalformedResponses","Elapsed":0} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups"} {"Time":"2026-09-12T11:38:47.9934865+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Output":"=== RUN TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Output":"--- PASS: TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPinnedOpenAIModelsListMixedAccountsShareColdCacheAcrossGroups","Elapsed":0} {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials"} {"Time":"2026-09-12T11:38:47.9940276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Output":"=== RUN TestFetchOpenAIModelsListResolvesShadowOAuthCredentials\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Output":"--- PASS: TestFetchOpenAIModelsListResolvesShadowOAuthCredentials (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListResolvesShadowOAuthCredentials","Elapsed":0} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Output":"=== RUN TestProjectAccountModelsCannotExposeCodexMediaThroughAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Output":"--- PASS: TestProjectAccountModelsCannotExposeCodexMediaThroughAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProjectAccountModelsCannotExposeCodexMediaThroughAlias","Elapsed":0} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Output":"=== RUN TestFetchOpenAIModelsListRejectsUnexpectedCold304\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Output":"--- PASS: TestFetchOpenAIModelsListRejectsUnexpectedCold304 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchOpenAIModelsListRejectsUnexpectedCold304","Elapsed":0} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Output":"=== RUN TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Output":"--- PASS: TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIModelsCacheSeparatesRepresentationsForIdenticalRequests","Elapsed":0} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54"} {"Time":"2026-09-12T11:38:47.9945382+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Output":"=== RUN TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.994Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt6\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Output":"--- PASS: TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ResponsesUnknownModelDoesNotFallbackToGPT54","Elapsed":0} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Output":"=== RUN TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":124,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Output":"--- PASS: TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthResponsesPromotesSystemMessageWithoutDuplication","Elapsed":0} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Output":"=== RUN TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":456,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Output":"--- PASS: TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeResponsesBodyModificationPreservesHTMLChars","Elapsed":0} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Output":"=== RUN TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9950426+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Output":"--- PASS: TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthMessagesBridgeDoesNotInjectDefaultInstructions","Elapsed":0} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamKeepsToolNameAndBodyNormalized","Elapsed":0} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=oauth type=oauth model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_GroupForceOpenAIFastInjectsMissingTier","Elapsed":0} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=125 name=acc type=oauth model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.995Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":125,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9955473+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_PreservesNamespaceRequest","Elapsed":0} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceRequestAndStreamResponse","Elapsed":0} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"=== RUN TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":124,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Output":"--- PASS: TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_FlattenEnabledNamespaceRequestAndStreamResponse","Elapsed":0} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse","Output":"=== RUN TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse","Output":"--- PASS: TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_NativeOAuth_NamespaceNonStreamingResponse","Elapsed":0} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NamespaceNonStreamingResponse","Elapsed":0} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest"} {"Time":"2026-09-12T11:38:47.9960601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_FlattenEnabledNamespaceCollisionReturnsBadRequest","Elapsed":0} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-compact\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CompactUsesJSONAndKeepsNonStreaming","Elapsed":0} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.996Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamRequestIgnoresClientCancel","Elapsed":0} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false"} {"Time":"2026-09-12T11:38:47.9965688+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex-max stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-codex-max\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=false","Elapsed":0} {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true"} {"Time":"2026-09-12T11:38:47.9970782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.1-codex-max stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.1-codex-max\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault/stream=true","Elapsed":0} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexMissingInstructionsGetsDefault","Elapsed":0} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"=== RUN TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9975856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:47.997Z\",\"msg\":\"[OpenAI] Model mapping applied: astra-public -\u003e gpt-6-astra (account: acc, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.998Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-6-astra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Output":"--- PASS: TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_MissingInstructionsUsesMappedModelTemplate","Elapsed":0} {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform"} {"Time":"2026-09-12T11:38:47.9981212+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.999Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DisabledUsesLegacyTransform","Elapsed":0} {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier"} {"Time":"2026-09-12T11:38:47.9991394+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:47.999Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceOpenAIFastInjectsMissingTier","Elapsed":0} {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter"} {"Time":"2026-09-12T11:38:47.9996496+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.000Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_GroupForceStillHonorsGlobalFilter","Elapsed":0} {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel"} {"Time":"2026-09-12T11:38:48.0006699+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.001Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_UpstreamRequestIgnoresClientCancel","Elapsed":0} {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator"} {"Time":"2026-09-12T11:38:48.0012121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"=== RUN TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Output":"--- PASS: TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthLegacy_CompositeCodexUAUsesCodexOriginator","Elapsed":0} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_ResponseHeadersAllowXCodex","Elapsed":0} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_UpstreamErrorIncludesPassthroughFlag","Elapsed":0} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_forbidden_is_reported_as_gateway_failure","Elapsed":0} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/upstream_unauthorized_is_reported_as_gateway_failure","Elapsed":0} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx"} {"Time":"2026-09-12T11:38:48.0022334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/html_5xx","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/structured_5xx","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/unstructured_4xx","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=sensitive-upstream type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors/malicious_valid_json_4xx","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_RebuildsUpstreamErrors","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/positive_delay_seconds","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/fractional_delay","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/scientific_notation","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/explicit_plus_sign","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/zero","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/negative_delay","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/uint64_overflow","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/future_http_date","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date","Output":"=== RUN TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter/past_http_date","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Output":"--- PASS: TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIPassthroughErrorHeaders_StrictRetryAfter","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=125 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.002Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":125,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorBeforeKeepaliveIsSingleJSON","Elapsed":0} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE"} {"Time":"2026-09-12T11:38:48.0027432+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=126 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":126,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_CompactErrorAfterKeepaliveIsFailedSSE","Elapsed":0.2} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"platform\":\"openai\",\"reset_at\":\"2026-09-19T03:38:48.000Z\",\"reset_in\":604799000}\n"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_429_rate_limit","Elapsed":0} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2029836+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.202Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.202Z\",\"logger\":\"slog\",\"msg\":\"account_overloaded\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"until\":\"2026-09-12T03:48:48.202Z\"}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_529_overload","Elapsed":0} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"status_code\":502}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_502_bad_gateway","Elapsed":0} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"status_code\":503}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_503_unavailable","Elapsed":0} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"status_code\":504}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/oauth_504_gateway_timeout","Elapsed":0} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"platform\":\"openai\",\"reset_at\":\"2026-09-19T03:38:48.000Z\",\"reset_in\":604799000}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_429_rate_limit","Elapsed":0} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2037483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.203Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.203Z\",\"logger\":\"slog\",\"msg\":\"account_overloaded\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":123,\"until\":\"2026-09-12T03:48:48.203Z\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover/apikey_529_overload","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_RetryableStatusesTriggerFailover","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_500","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_502","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_503","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_504","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_520","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_521","Elapsed":0} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2043006+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_522","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_523","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=124 name=api-key-transient-5xx type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":124,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover/status_524","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_Transient5xxTriggersFailover","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=127 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":127,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_ContextWindow502DoesNotFailover","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=128 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":128,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeConfigured5xxRetriesSameAccount","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=129 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"logger\":\"slog\",\"msg\":\"pool_mode_error_skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":129,\"status_code\":401}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/configured_401","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=129 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.204Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.204Z\",\"logger\":\"slog\",\"msg\":\"pool_mode_error_skipped\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":129,\"status_code\":403}\n"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover/default_403","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PoolModeAuthErrorsTriggerFailover","Elapsed":0} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error"} {"Time":"2026-09-12T11:38:48.2048629+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/request_error","Elapsed":0} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"=== RUN TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover/read_error","Elapsed":0} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover","Output":"--- PASS: TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIPassthrough_CompactNetworkErrorsTriggerFailover","Elapsed":0} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_NonCodexUAFallbackToCodexUA","Elapsed":0} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_OfficialIdentityUnified","Elapsed":0} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.205Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_CodexTuiIdentityUnified","Elapsed":0} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey"} {"Time":"2026-09-12T11:38:48.2054009+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.206Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4401,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Elapsed":0} {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey"} {"Time":"2026-09-12T11:38:48.2064654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.206Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=4402 name=oauth-raw type=oauth model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.206Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":4402,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Elapsed":0} {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata"} {"Time":"2026-09-12T11:38:48.2069795+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.207Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4403,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Elapsed":0} {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey"} {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2074923+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.207Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":4404,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 拒绝非官方客户端请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":false,\"reject_reason\":\"official_client_user_agent_not_matched\",\"request_method\":\"POST\",\"request_path\":\"/v1/responses\",\"request_query\":\"\",\"request_host\":\"example.com\",\"request_client_ip\":\"192.0.2.1\",\"request_remote_addr\":\"192.0.2.1:1234\",\"request_user_agent\":\"curl/8.0\",\"request_content_type\":\"\",\"request_content_length\":0,\"request_stream\":false,\"request_model\":\"gpt-5.2\",\"request_headers\":{\"user-agent\":\"curl/8.0\"},\"request_body_size\":85}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_RejectsNonCodexClient","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_cli_rs","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_vscode","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_user_agent_matched\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/codex_app","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"=== RUN TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI codex_cli_only 放行请求\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":123,\"codex_cli_only_enabled\":true,\"codex_official_client_match\":true,\"reject_reason\":\"official_client_originator_matched\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies/originator_codex_chatgpt_desktop","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Output":"--- PASS: TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexCLIOnly_AllowOfficialClientFamilies","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamingSetsFirstTokenMs","Elapsed":0} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage"} {"Time":"2026-09-12T11:38:48.2080079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=123 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":123,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI passthrough] Client disconnected during streaming, continue draining upstream for usage: account=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_StreamClientDisconnectStillCollectsUsage","Elapsed":0} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"=== RUN TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=456 name=apikey-acc type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":456,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPassthrough_PreservesBodyAndUsesResponsesEndpoint","Elapsed":0} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=321 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 检测到超时相关请求头,将按配置过滤以降低断流风险\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":321,\"timeout_headers\":[\"x-stainless-timeout=10000\"]}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":321,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_WarnOnTimeoutHeadersForStream","Elapsed":0} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=654 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":654,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 上游流在未收到 [DONE] 时结束,疑似断流\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":654,\"upstream_request_id\":\"rid-truncate\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_InfoWhenStreamEndsWithoutDone","Elapsed":0} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=111 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 检测到超时相关请求头,将按配置过滤以降低断流风险\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":111,\"timeout_headers\":[\"x-stainless-timeout=120000\"]}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":111,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_DefaultFiltersTimeoutHeaders","Elapsed":0} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"=== RUN TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=222 name=acc type=oauth model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"OpenAI passthrough 透传请求包含超时相关请求头,且当前配置为放行,可能导致上游提前断流\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"account_id\":222,\"timeout_headers\":[\"x-stainless-timeout=120000\"]}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.208Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":222,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Output":"--- PASS: TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPassthrough_AllowTimeoutHeadersWhenConfigured","Elapsed":0} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Output":"=== RUN TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2085159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Output":"--- PASS: TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_GenerateAuthURL_OpenAIKeepsCodexFlow","Elapsed":0} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"=== RUN TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.209Z\",\"logger\":\"slog\",\"msg\":\"chatgpt_account_check_client_error\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"stop before request\"}\n"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.209Z\",\"logger\":\"slog\",\"msg\":\"openai_privacy_client_error\",\"service\":\"sub2api\",\"env\":\"test\",\"error\":\"stop before request\"}\n"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Output":"--- PASS: TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_NoRefreshTokenUsesExistingAccessToken","Elapsed":0} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken"} {"Time":"2026-09-12T11:38:48.2090244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken","Output":"=== RUN TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken","Output":"--- PASS: TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_RefreshAccountToken_PATIgnoresStaleRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken","Output":"=== RUN TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken","Output":"--- PASS: TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_NeedsRefresh_SkipsAccountWithoutRefreshToken","Elapsed":0} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields","Output":"=== RUN TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields","Output":"--- PASS: TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenRefresher_Refresh_PATRemovesStaleOAuthFields","Elapsed":0} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Output":"=== RUN TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2095539+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.209Z\",\"logger\":\"slog\",\"msg\":\"openai_token_cache_miss\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":0}\n"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Output":"--- PASS: TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAITokenProvider_NoRefreshTokenExpiredAccessTokenReturnsError","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired","Output":"=== RUN TestOpenAIOAuthService_ExchangeCode_StateRequired\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired","Output":"--- PASS: TestOpenAIOAuthService_ExchangeCode_StateRequired (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateRequired","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch","Output":"=== RUN TestOpenAIOAuthService_ExchangeCode_StateMismatch\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch","Output":"--- PASS: TestOpenAIOAuthService_ExchangeCode_StateMismatch (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMismatch","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch","Output":"=== RUN TestOpenAIOAuthService_ExchangeCode_StateMatch\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch","Output":"--- PASS: TestOpenAIOAuthService_ExchangeCode_StateMatch (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthService_ExchangeCode_StateMatch","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_RemovesUnsupportedUser","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesCompatibilityFields","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_NormalizesReasoningMode","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Output":"=== RUN TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Output":"--- PASS: TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIOAuthResponsesCompatibilityBody_PreservesExplicitInput","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_OnlyStripsOAuthFields","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesNativeItemIDs","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_APIKeyStoreFalseReplay","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/pro_maps_to_max","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/explicit_effort_wins","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode/other_mode_only_removed","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_max_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/standard_+_max_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/missing_mode_+_max_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_+_explicit_high_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody/pro_without_effort_does_not_inject_max","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_AstraPreservesBody","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.6-sol_pro_maps_to_max","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins","Output":"=== RUN TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior/gpt-5.4_explicit_effort_wins","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Output":"--- PASS: TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesReasoningMode_NonAstraKeepsLegacyBehavior","Elapsed":0} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode"} {"Time":"2026-09-12T11:38:48.2100584+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_AstraPreservesReasoningMode","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_AstraPreservesReasoningMode","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_ReasoningModeAccountScope","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Output":"=== RUN TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Output":"--- PASS: TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesWebSocketCompatibilityBody_SanitizesToolSchemas","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesNonStrictOptionalFields","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_DoesNotExpandStrictSchema","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_TraversesNestedSchemaContainers","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Output":"=== RUN TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Output":"--- PASS: TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponseFormatSchemasBody_PreservesExistingTypeValues","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_CompactRemovesUnsupportedUser","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_StringInputWrappedAsArray","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_EmptyStringInputWrappedAsEmptyArray","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ObjectInputWrappedAsArray","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Output":"=== RUN TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Output":"--- PASS: TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIPassthroughOAuthBody_ArrayInputUnchanged","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/missing_is_optional","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_string_remains_rejected","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/empty_remains_rejected","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted","Output":"=== RUN TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason/non_empty_remains_accepted","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Output":"--- PASS: TestDetectOpenAIPassthroughInstructionsRejectReason (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDetectOpenAIPassthroughInstructionsRejectReason","Elapsed":0} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker"} {"Time":"2026-09-12T11:38:48.2105701+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker","Output":"=== RUN TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker","Output":"--- PASS: TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker (0.40s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStartOpenAISSEKeepalive_WorksWithoutCompactMarker","Elapsed":0.4} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/empty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/empty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/empty","Elapsed":0} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/response_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/response_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/response_id","Elapsed":0} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/message_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/message_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/message_id","Elapsed":0} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/item_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6124039+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/item_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/item_id","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Output":"=== RUN TestClassifyOpenAIPreviousResponseIDKind/unknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind/unknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind/unknown","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Output":"--- PASS: TestClassifyOpenAIPreviousResponseIDKind (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIPreviousResponseIDKind","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Output":"=== RUN TestIsOpenAIPreviousResponseIDLikelyMessageID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Output":"--- PASS: TestIsOpenAIPreviousResponseIDLikelyMessageID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIPreviousResponseIDLikelyMessageID","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Output":"=== RUN TestOpenAIUsagePricingAt\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Output":"--- PASS: TestOpenAIUsagePricingAt (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIUsagePricingAt","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Output":"=== RUN TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Output":"--- PASS: TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlStickyBindingOccursOnlyAfterTerminalAdmission","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Output":"=== RUN TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Output":"--- PASS: TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlAfterAdmissionBindEagerWithoutGate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Output":"=== RUN TestResolveOpenAIProfitControlGate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/nil_group_id_yields_no_gate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/no_ctx_group_and_no_snapshot_yields_no_gate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/disabled_group_yields_no_gate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled","Output":"=== RUN TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled","Output":"--- PASS: TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/non_openai_or_grok_platform_yields_no_gate_even_if_enabled","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/grok_group_routed_through_openai_handler_installs_gate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate","Output":"=== RUN TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/ctx_group_id_mismatch_without_snapshot_yields_no_gate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate","Output":"=== RUN TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate","Output":"--- PASS: TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_composes_margin_and_buffer_from_downstream_rate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing","Output":"=== RUN TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing","Output":"--- PASS: TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate/threshold_applies_peak_factor_exactly_like_billing","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Output":"--- PASS: TestResolveOpenAIProfitControlGate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIProfitControlGate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Output":"=== RUN TestOpenAIProfitControlVetoReason\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything","Output":"=== RUN TestOpenAIProfitControlVetoReason/no_gate_admits_everything\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything","Output":"--- PASS: TestOpenAIProfitControlVetoReason/no_gate_admits_everything (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/no_gate_admits_everything","Elapsed":0} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits","Output":"=== RUN TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6129061+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits","Output":"--- PASS: TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/fresh_rate_below_threshold_admits","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon","Output":"=== RUN TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon","Output":"--- PASS: TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_exactly_at_threshold_admits_via_epsilon","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits","Output":"=== RUN TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits","Output":"--- PASS: TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_within_float_noise_above_threshold_admits","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Output":"=== RUN TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.612Z\",\"logger\":\"slog\",\"msg\":\"profit_control_activity\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":0,\"platform\":\"\",\"threshold\":0.7,\"installs_total\":0,\"veto_threshold_total\":1,\"veto_invalid_account_rate_total\":0,\"refresh_failure_total\":0}\n"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Output":"--- PASS: TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/rate_above_threshold_is_vetoed","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream","Output":"=== RUN TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream","Output":"--- PASS: TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/zero_threshold_only_admits_free_upstream","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid","Output":"=== RUN TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid","Output":"--- PASS: TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/missing_account_rate_is_invalid","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable","Output":"=== RUN TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable","Output":"--- PASS: TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/oauth_account_with_manual_rate_is_priceable","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate","Output":"=== RUN TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate","Output":"--- PASS: TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/stale_probe_does_not_affect_manual_account_rate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid","Output":"=== RUN TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid","Output":"--- PASS: TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason/negative_and_non-finite_rates_are_invalid","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Output":"--- PASS: TestOpenAIProfitControlVetoReason (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProfitControlVetoReason","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Output":"=== RUN TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Output":"--- PASS: TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitThresholdTTLAndSuccessReset","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Output":"=== RUN TestOpenAIProxyStreamCircuitCollapsesBurstFailures\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Output":"--- PASS: TestOpenAIProxyStreamCircuitCollapsesBurstFailures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitCollapsesBurstFailures","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Output":"=== RUN TestOpenAIProxyStreamCircuitDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Output":"--- PASS: TestOpenAIProxyStreamCircuitDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitDisabled","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Output":"=== RUN TestOpenAIProxyStreamCircuitActiveBlockCount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Output":"--- PASS: TestOpenAIProxyStreamCircuitActiveBlockCount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitActiveBlockCount","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Output":"=== RUN TestOpenAIProxyStreamQuarantineBypassContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Output":"--- PASS: TestOpenAIProxyStreamQuarantineBypassContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamQuarantineBypassContext","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Output":"=== RUN TestOpenAIProxyStreamCircuitBoundsEntries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Output":"--- PASS: TestOpenAIProxyStreamCircuitBoundsEntries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIProxyStreamCircuitBoundsEntries","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/历史账号默认关闭","Elapsed":0} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态"} {"Time":"2026-09-12T11:38:48.6134376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/开启时补齐两个百分百阈值并剥离运行态","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Output":"=== RUN TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra/阈值和账号类型严格校验","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Output":"--- PASS: TestNormalizeOpenAIAutoResetCreditExtra (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIAutoResetCreditExtra","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/卡状态未知时暂停并触发异步查询","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/明确有卡时允许继续到用卡阈值","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/达到用卡阈值后即使有卡也退出调度","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Output":"=== RUN TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates/自然窗口重置后清除动态阻塞","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Output":"--- PASS: TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldAutoPauseOpenAIAccountByQuota_AutoResetCreditStates","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Output":"=== RUN TestSelectOpenAIAutoResetCandidate_FailsClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Output":"--- PASS: TestSelectOpenAIAutoResetCandidate_FailsClosed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSelectOpenAIAutoResetCandidate_FailsClosed","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/5h","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/7d","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Output":"=== RUN TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows/同时触发","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Output":"--- PASS: TestOpenAIQuotaAutoResetService_AssessesIndependentWindows (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_AssessesIndependentWindows","Elapsed":0} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"=== RUN TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_claim_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 mode=new_claim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=2093fa86e74c68a788c4d4de817b5fb4ea66e587c60cb6070cd3ade8431d5faf state_transition=none-\u003eprocessing replayed=false claim_mode=new\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_conflict_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 reason=in_progress\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.613947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.613Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=2093fa86e74c68a788c4d4de817b5fb4ea66e587c60cb6070cd3ade8431d5faf state_transition=processing-\u003econflict replayed=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=2093fa86e74c68a788c4d4de817b5fb4ea66e587c60cb6070cd3ade8431d5faf state_transition=processing-\u003esucceeded replayed=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_processing_duration_ms endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=51.372\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"logger\":\"slog\",\"msg\":\"openai_auto_reset_credit_success\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":99,\"trigger_window\":\"5h\",\"threshold_5h\":1,\"threshold_7d\":1,\"utilization_5h\":1,\"utilization_7d\":0.1,\"windows_reset\":2}\n"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Output":"--- PASS: TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_ConcurrentInstancesConsumeOnce","Elapsed":0.05} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"=== RUN TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_claim_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 mode=new_claim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=none-\u003eprocessing replayed=false claim_mode=new\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6653189+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_retry_backoff_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6663158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=processing-\u003efailed_retryable replayed=false reason=EXECUTION_FAILED\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_processing_duration_ms endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=0.000\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:48.665Z\",\"logger\":\"slog\",\"msg\":\"openai_auto_reset_credit_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":100,\"trigger_window\":\"5h\",\"available_count\":1,\"error_code\":\"OPENAI_AUTO_RESET_FAILED\"}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_claim_total endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=1 mode=reclaim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=failed_retryable-\u003eprocessing replayed=false claim_mode=reclaim\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyAudit] endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit key_hash=d8c9b3a2b2e993b238ce7600acb9a4e8b23c1c53384797d3dd60ff5316f09ff3 state_transition=processing-\u003esucceeded replayed=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.665Z\",\"msg\":\"[IdempotencyMetric] name=idempotency_processing_duration_ms endpoint=/system/openai/reset-credit/auto scope=openai_auto_reset_credit value=0.000\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.idempotency\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.666Z\",\"logger\":\"slog\",\"msg\":\"openai_auto_reset_credit_success\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":100,\"trigger_window\":\"5h\",\"threshold_5h\":1,\"threshold_7d\":1,\"utilization_5h\":1,\"utilization_7d\":0,\"windows_reset\":2}\n"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Output":"--- PASS: TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIQuotaAutoResetService_TimeoutRetryReusesRequestBody","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_PreservesAvailableCreditOrder","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_ContainsCodexKeys","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_NilUsage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_NilUsage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NilUsage","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Output":"=== RUN TestBuildCodexSparkWindowExtraUpdates_NoBengalfox\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Output":"--- PASS: TestBuildCodexSparkWindowExtraUpdates_NoBengalfox (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexSparkWindowExtraUpdates_NoBengalfox","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/credits","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/rate_limit_reset_credits","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/items","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/data","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array","Output":"=== RUN TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers/array","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Output":"--- PASS: TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIRateLimitResetCreditDetails_CompatibleContainers","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/后缀推导回退到原始模型(OAuth_上游模型已剥后缀)","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/GPT-5.6_后缀_max_经原始模型推导保留","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_用第一个非空候选(映射后模型)判定","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/显式_max_非_5.6_首候选仍折叠为_xhigh","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Output":"=== RUN TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates/所有候选均无后缀时返回_nil","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Output":"--- PASS: TestExtractOpenAIReasoningEffortFromBodyModelCandidates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortFromBodyModelCandidates","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Output":"=== RUN TestExtractOpenAIReasoningEffortModelCandidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Output":"--- PASS: TestExtractOpenAIReasoningEffortModelCandidates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAIReasoningEffortModelCandidates","Elapsed":0} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"=== RUN TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6666577+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.666Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.3-codex-xhigh -\u003e gpt-5.3-codex (account: openai-oauth-suffix, type: oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.667Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":11,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Output":"--- PASS: TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceForwardOAuthDerivesEffortFromSuffixModel","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Output":"=== RUN TestOpenAIReasoningEffortPolicyContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Output":"--- PASS: TestOpenAIReasoningEffortPolicyContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIReasoningEffortPolicyContext","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/nested_caps_high\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/nested_caps_high (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/nested_caps_high","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/flat_caps_high\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/flat_caps_high (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/flat_caps_high","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_caps_max","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/Anthropic_output_config_maps_before_cap","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_raise_omitted","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_lower_value","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/normalizes_request_alias","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_max_below_its_distinct_rank","Elapsed":0} {"Time":"2026-09-12T11:38:48.6676948+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_xhigh_below_max","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/ignores_stale_none_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/caps_both_shapes","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/maps_before_cap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/maps_before_cap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_before_cap","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/does_not_chain_mappings","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/maps_nested_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/maps_nested_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_nested_none","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/maps_flat_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/maps_flat_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/maps_flat_none","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/none_mapping_runs_before_cap","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_without_mappings","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_none_byte_for_byte_when_scope_does_not_match","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_scope_maps_none","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_scope_maps_none","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_scope_maps_none","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/global_scope_maps_none","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_unknown_without_mapping","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/keeps_non_string_value","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_applies_to_matching_model","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/prefix_mapping_skips_non_matching_model","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_prefix","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_prefix_beats_shorter_prefix","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/falls_back_to_global_mapping_when_no_model_scope_hits","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_scoped_mapping_still_respects_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/model_match_is_case_insensitive","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_applies_to_matching_model","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/suffix_mapping_skips_non_matching_model","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/exact_mapping_beats_suffix","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_suffix_beats_shorter_suffix","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/longer_affix_beats_the_other_affix","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/empty_type_and_model_apply_to_every_model","Elapsed":0} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.66829+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6692965+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_rejects_over_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_keeps_value_at_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_after_mapping_still_over_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_allows_mapping_under_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/deny_ignored_without_ceiling","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_nested_effort","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_matching_flat_effort","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_Anthropic_output_config","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_rejects_none_source","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_respects_model_scope","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_skips_non_matching_model","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_leaves_other_efforts_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite","Output":"=== RUN TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy/mapping_deny_takes_precedence_over_ceiling_rewrite","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Output":"--- PASS: TestApplyOpenAIReasoningEffortPolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIReasoningEffortPolicy","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.669Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":161,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/native_responses","Elapsed":0} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.669Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=161 name=api_key_passthrough type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6699327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.669Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":161,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.6704367+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite/api_key_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_HTTP413SwitchesAccountsBeforeWrite","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.670Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":162,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_false","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"=== RUN TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:48.670Z\",\"msg\":\"[OpenAI 自动透传] 命中自动透传分支: account=162 name= type=apikey model=gpt-5.2 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.670Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":162,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts/passthrough_true","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Output":"--- PASS: TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRequestBodyLimitFailover_ContextWindow413DoesNotSwitchAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressMessagesOnly","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressConvertsChatTopLevelFields","Elapsed":0} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative"} {"Time":"2026-09-12T11:38:48.6707746+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressNativeInputRemainsAuthoritative","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressKeepsPromptAliasAndDropsCommands","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesNativePromptTemplate","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Output":"=== RUN TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Output":"--- PASS: TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesLegacyIngressPreservesUnknownPromptShapeWhileDroppingCommands","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/named_standalone_inputs_do_not_legitimize_orphan_results","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_matches_regardless_of_item_order","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/outputs_do_not_legitimize_each_other","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/preserves_all_output_variants_with_matching_calls","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call","Output":"=== RUN TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs/previous_response_may_contain_the_missing_call","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Output":"--- PASS: TestSanitizeOpenAIResponsesOrphanToolOutputs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesOrphanToolOutputs","Elapsed":0} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated"} {"Time":"2026-09-12T11:38:48.6712764+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Output":"=== RUN TestOpenAIResponsesInputTextIsNeverSilentlyTruncated\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Output":"--- PASS: TestOpenAIResponsesInputTextIsNeverSilentlyTruncated (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputTextIsNeverSilentlyTruncated","Elapsed":0.02} {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation"} {"Time":"2026-09-12T11:38:48.689626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Output":"=== RUN TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Output":"--- PASS: TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputNeverRequestsPreemptiveTruncation","Elapsed":0} {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse"} {"Time":"2026-09-12T11:38:48.6938985+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Output":"=== RUN TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:48.694Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Output":"--- PASS: TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthDropsOrphanAfterDroppingPreviousResponse","Elapsed":0} {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream"} {"Time":"2026-09-12T11:38:48.6953977+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Output":"=== RUN TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.0809778+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.080Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Output":"--- PASS: TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream (0.41s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PreservesOversizedToolOutputForUpstream","Elapsed":0.41} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/msg_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/message/item_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/rs_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/reasoning/item_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call/call_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_call/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1072138+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/local_shell_call/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/ctc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/tsc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_call/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/ws_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/web_search_call/item_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/fc_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123"} {"Time":"2026-09-12T11:38:49.1080102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/custom_tool_call_output/ctco_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/function_call_output/fco_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/tool_search_output/tso_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/mcp_tool_call_output/mcpo_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123","Output":"=== RUN TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts/future_item/item_123","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Output":"--- PASS: TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesInputItemIDPrefixUsesObservedOutputContracts","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsDoesNotCascadeAcrossIDNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsLeavesUnrelatedReferencesUntouched","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesReferenceToDuplicateRetainedID","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsPreservesOpaqueOutputsAndReferences","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsEmptyKnownIDsOnly","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Output":"=== RUN TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Output":"--- PASS: TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesInputItemIDsStripsOnlyNonPairCallIDs","Elapsed":0} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"=== RUN TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1086689+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.108Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Output":"--- PASS: TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthPreservesCodexNamespaceTools","Elapsed":0} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Output":"=== RUN TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.109Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Output":"--- PASS: TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyPreservesDeclaredNamespaceToolCalls","Elapsed":0} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening"} {"Time":"2026-09-12T11:38:49.1091725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Output":"=== RUN TestOpenAIGatewayService_OAuthCompactKeepsFlattening\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1104117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.109Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Output":"--- PASS: TestOpenAIGatewayService_OAuthCompactKeepsFlattening (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthCompactKeepsFlattening","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Output":"=== RUN TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.109Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Output":"--- PASS: TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthFlattenFlagRestoresLegacyBehavior","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Output":"=== RUN TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.110Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.6-terra\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Output":"--- PASS: TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ForwardClearsStaleNamespaceNames","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_default_preserves","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_http_passthrough_default_preserves","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_wsv2_default_preserves","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_flattens","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_compact_wsv2_preserves","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_compact","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_http_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/oauth_flatten_enabled_wsv2_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_flatten_enabled_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/apikey_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/apikey_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/apikey_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/grok_oauth_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account","Output":"=== RUN TestShouldFlattenOpenAIResponsesNamespaces/nil_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1108112+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces/nil_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces/nil_account","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Output":"--- PASS: TestShouldFlattenOpenAIResponsesNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldFlattenOpenAIResponsesNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_keeps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_http_passthrough_keeps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_strips","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_flatten_enabled_strips","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_wsv2_keeps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/oauth_compact_wsv2_strips","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_without_namespace_tool_strips","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_namespace_tool_keeps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_with_mixed_case_namespace_tool_keeps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_function_tool_with_namespace_field_strips","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/apikey_compact_with_namespace_tool_strips","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/setup_token_keeps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account","Output":"=== RUN TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces/nil_account","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Output":"--- PASS: TestShouldKeepOpenAIResponsesToolCallNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldKeepOpenAIResponsesToolCallNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/oauth_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/oauth_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/apikey_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/apikey_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/oauth_wsv2_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/apikey_wsv2_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http"} {"Time":"2026-09-12T11:38:49.1116307+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/setup_token_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/grok_oauth_http","Elapsed":0} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account","Output":"=== RUN TestShouldStripOpenAIResponsesInputNamespaces/nil_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces/nil_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces/nil_account","Elapsed":0} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Output":"--- PASS: TestShouldStripOpenAIResponsesInputNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldStripOpenAIResponsesInputNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Output":"=== RUN TestStripOpenAIResponsesInputNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Output":"--- PASS: TestStripOpenAIResponsesInputNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Output":"=== RUN TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Output":"--- PASS: TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesLeavesOtherShapesByteExact","Elapsed":0} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces"} {"Time":"2026-09-12T11:38:49.1121327+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Output":"=== RUN TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Output":"--- PASS: TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIResponsesInputNamespacesKeepsToolCallNamespaces","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateRejectsDuplicateBodyAndCap","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestAllowsSameTransformAcrossAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateForRequestSharesBoundedBudgetAcrossAccounts","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/namespace_belongs_to_message","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/max_output_tokens_only_mentioned","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_param_overrides_namespace_mention","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/nested_max_output_tokens_param_is_not_top_level","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors/structured_target_conflicts_with_message_target","Elapsed":0} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1126494+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousErrors","Elapsed":0} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRepairsAutomationMissingRootType","Elapsed":0} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotGuessAutomationRootType","Elapsed":0} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyFindsNamespacePathInMessage","Elapsed":0} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase"} {"Time":"2026-09-12T11:38:49.1131605+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsNamespacePathToRejectionPhrase","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyDoesNotTreatMaxOutputTokensSuggestionAsRejection","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyBindsMaxOutputTokensToRejectionPhrase","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/structured_param","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus/message_param","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactIndexedStatus","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/message_becomes_empty_string","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/reasoning_content_is_removed","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/unknown_item_is_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent/non_null_content_is_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyNormalizesExactNullContent","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExactReasoningContentAboveMaximumZero","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/message_content_is_not_reasoning","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/structured_param_and_message_disagree","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations/different_error_code","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeReasoningMaximumZeroMutations","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesExplicitlyRejectedTopLevelTruncation","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"=== RUN TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after truncation parameter rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Output":"--- PASS: TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExplicitlyRejectedTopLevelTruncation","Elapsed":0} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path"} {"Time":"2026-09-12T11:38:49.1142643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/nested_status_path","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_index_out_of_bounds","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/status_path_only_mentioned","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_param_and_message_disagree","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations/content_error_only_mentions_null","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsUnsafeIndexedMutations","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"=== RUN TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after indexed status parameter rejection (account: openai-oauth-namespace)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Output":"--- PASS: TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OAuthRetriesExactRejectedStatus","Elapsed":0} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"=== RUN TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1147662+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after indexed message null content rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.114Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Output":"--- PASS: TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyRetriesExactRejectedNullMessageContent","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/top_level","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint/indexed_path_from_message","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRemovesModelRejectedPromptCacheBreakpoint","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/structured_param_disagrees","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors/index_out_of_bounds","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyRejectsAmbiguousPromptCacheBreakpointErrors","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/invalid_parameter_code","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal/model_rejection_message","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyAcceptsEitherCacheModelRejectionSignal","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Output":"=== RUN TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Output":"--- PASS: TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRejectedFieldRetryStateAllowsPromptCacheBreakpointVariantOnce","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Output":"=== RUN TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.115Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Output":"--- PASS: TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_APIKeyStripsAllIndexedNamespacesBeforeFirstForward","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Output":"=== RUN TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.115Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Output":"--- PASS: TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceProactivelyStripsCrossProviderReasoningContent","Elapsed":0} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses"} {"Time":"2026-09-12T11:38:49.1155244+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses","Elapsed":0} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5108,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/oauth/v1/responses/compact","Elapsed":0} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses"} {"Time":"2026-09-12T11:38:49.1163102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses","Elapsed":0} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Output":"=== RUN TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward/apikey/v1/responses/compact","Elapsed":0} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Output":"--- PASS: TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_OpenAIHTTPStripsInputNamespacesBeforeFirstForward","Elapsed":0} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"=== RUN TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after max_output_tokens parameter rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Output":"--- PASS: TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_RetriesExplicitMaxOutputTokensRejection","Elapsed":0} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"=== RUN TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request after max_output_tokens parameter rejection (account: responses-compatible)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1168217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.116Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":5107,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Output":"--- PASS: TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ComposesProactiveNamespaceStripWithRejectedFieldRetry","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsStatusForWholeType","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Output":"=== RUN TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Output":"--- PASS: TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIResponsesRejectedFieldRetryBodyClearsUntypedStatusAtIndexOnly","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_TopLevelFunctionTool","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ValidSchemaUntouched","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MissingTypeNotInvented","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectOnlyRootUnion","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedUnionKeyword","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/mixed_union","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/unproven_branch","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/empty_union","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary/existing_null_handled_by_existing_repair","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ObjectUnionMissingTypeSafetyBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_NestedHistoryTools","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_ChatCompletionsShape","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_InputItemShapes","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotTreatMessagesAsTools","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_PreservesUntouchedBytes","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_EscapedKey","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DuplicateTypeIsAmbiguousNoOp","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/null_type_trailing","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/pattern_trailing","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON/invalid_utf8","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_InvalidAndTrailingJSON","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/openai","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/anthropic","Elapsed":0} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi"} {"Time":"2026-09-12T11:38:49.1174512+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/kimi","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/zhipu","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/deepseek","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/grok","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/gemini","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/antigravity","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/composite","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00","Output":"=== RUN TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary/#00","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Output":"--- PASS: TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaCapabilities_PlatformBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/anthropic","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/grok","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/kimi","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/zhipu","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/deepseek","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary/minimax","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_ReplayBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemasForPlatform_GrokObjectOnlyRootUnion","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OnlyOffendingIndexRewritten","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/empty_body","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/no_tools","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_null","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tools_object","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/tool_is_string","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_is_string","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/parameters_null","Elapsed":0} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1183941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_string","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/input_item_not_object","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps/type_already_array","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_MalformedShapesAreNoOps","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DepthGuard","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_OutputStaysValidJSON","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_DoesNotMutateInputBody","Elapsed":0} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly"} {"Time":"2026-09-12T11:38:49.1188983+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_RemovesLookaroundOnly","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_PreservesRawDocumentRepresentation","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_AllMemberPositions","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_TraversesConservativeSchemaKeywords","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseMessageMetadata","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DecodesEscapedLookaround","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_EscapedKey","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DuplicateKeysStayValid","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Output":"=== RUN TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey","Output":"=== RUN TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey","Output":"--- PASS: TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/apikey","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth","Output":"=== RUN TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth","Output":"--- PASS: TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth/oauth","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Output":"--- PASS: TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesToolSchemaPlatformGate_APIKeyAndOAuth","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemas_DepthLimitReturnsOriginal","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTouchUserInputPattern","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Output":"=== RUN TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Output":"--- PASS: TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolSchemaPatterns_DoesNotTraverseInstanceData","Elapsed":0} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits"} {"Time":"2026-09-12T11:38:49.1204627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits","Output":"=== RUN TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits","Output":"--- PASS: TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeOpenAIResponsesToolParameterTypes_RewriteCountIndependentOfHits","Elapsed":0.02} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/fast_alias","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/priority","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/flex","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/ultrafast","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/explicit_default_sentinel","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/omitted_tier","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/auto_is_not_expanded_without_catalog_support","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/scale_is_not_expanded_without_catalog_support","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/unknown_tier_does_not_expand_protocol","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/invalid_header_value_is_omitted","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt-5.6;evil","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/delimiter_in_model_is_omitted:_gpt=5.6","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/api_key_strips_gateway-owned_hint_in_every_key_casing","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Output":"=== RUN TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers/oauth_replaces_spoofed_lowercase_hint","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Output":"--- PASS: TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAICodexRoutingHintCanonicalizesOfficialServiceTiers","Elapsed":0} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary"} {"Time":"2026-09-12T11:38:49.1357421+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/ordinary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/fast","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/ordinary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/flex","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"ultrafast\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/ordinary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"ultrafast\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/ultrafast","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"default\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/ordinary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough"} {"Time":"2026-09-12T11:38:49.1362446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1367867+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"default\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/default","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/ordinary","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Output":"=== RUN TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody/omitted","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Output":"--- PASS: TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIOAuthHTTPBuildersSendRoutingHintFromFinalBody","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_legacy_only_is_removed_including_raw_lowercase_key","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/oauth_mixed_beta_preserves_independent_tokens","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Output":"=== RUN TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta/api_key_explicit_beta_remains_caller_controlled","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Output":"--- PASS: TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIHTTPPassthroughStripsOnlyOAuthLegacyResponsesBeta","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"=== RUN TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.136Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"ultrafast\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"default\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Output":"--- PASS: TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSHeadersSendsOAuthRoutingHintOnly","Elapsed":0} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly"} {"Time":"2026-09-12T11:38:49.1371601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"=== RUN TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":917,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":917,\"final_model\":\"gpt-5.6-codex\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Output":"--- PASS: TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIRoutingDiagnosticsUseFinalDerivedValuesOnly","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Output":"=== RUN TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Output":"--- PASS: TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolPreferredContinuationIgnoresRoutingHintChanges","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Output":"=== RUN TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Output":"--- PASS: TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPoolUsesRoutingHintAsSoftDialAffinity","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Output":"=== RUN TestIsOpenAIOAuthLike\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth","Output":"=== RUN TestIsOpenAIOAuthLike/openai_oauth\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth","Output":"--- PASS: TestIsOpenAIOAuthLike/openai_oauth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_oauth","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token","Output":"=== RUN TestIsOpenAIOAuthLike/openai_setup_token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token","Output":"--- PASS: TestIsOpenAIOAuthLike/openai_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_setup_token","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key","Output":"=== RUN TestIsOpenAIOAuthLike/openai_api_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key","Output":"--- PASS: TestIsOpenAIOAuthLike/openai_api_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/openai_api_key","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token","Output":"=== RUN TestIsOpenAIOAuthLike/anthropic_setup_token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token","Output":"--- PASS: TestIsOpenAIOAuthLike/anthropic_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/anthropic_setup_token","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token","Output":"=== RUN TestIsOpenAIOAuthLike/grok_setup_token\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token","Output":"--- PASS: TestIsOpenAIOAuthLike/grok_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/grok_setup_token","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Output":"=== RUN TestIsOpenAIOAuthLike/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Output":"--- PASS: TestIsOpenAIOAuthLike/nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike/nil","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Output":"--- PASS: TestIsOpenAIOAuthLike (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIOAuthLike","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Output":"=== RUN TestOpenAIGatewayServiceGetAccessTokenSetupToken\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Output":"--- PASS: TestOpenAIGatewayServiceGetAccessTokenSetupToken (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayServiceGetAccessTokenSetupToken","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"=== RUN TestOpenAISetupTokenImagesUsesOAuthResponsesPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"[OpenAI] Images request routing request_model=gpt-image-2 endpoint=/v1/images/generations account_type=setup-token uploads=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":73,\"final_model\":\"gpt-5.6-luna\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Output":"--- PASS: TestOpenAISetupTokenImagesUsesOAuthResponsesPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenImagesUsesOAuthResponsesPath","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Output":"=== RUN TestOpenAISetupTokenWSCompatibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"gpt-5.1-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Output":"--- PASS: TestOpenAISetupTokenWSCompatibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenWSCompatibility","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"=== RUN TestOpenAISetupTokenChatCompletionsUsesCodexTransform\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai chat_completions: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":71,\"original_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":false,\"responses_shape\":false,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"9717875cd9aa4b57\"}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":71,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Output":"--- PASS: TestOpenAISetupTokenChatCompletionsUsesCodexTransform (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenChatCompletionsUsesCodexTransform","Elapsed":0} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"=== RUN TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1376622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.137Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"} {"Time":"2026-09-12T11:38:49.1386618+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":72,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1386618+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:38:49.1386618+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"} {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":72,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.138Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":72,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Output":"--- PASS: TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAISetupTokenMessagesUsesCodexBridgeAndTurnState","Elapsed":0} {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine"} {"Time":"2026-09-12T11:38:49.1391649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"=== RUN TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"--- PASS: TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0} {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine"} {"Time":"2026-09-12T11:38:49.1407008+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"=== RUN TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"--- PASS: TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingAsyncScannerRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0} {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine"} {"Time":"2026-09-12T11:38:49.1430071+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"=== RUN TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Output":"--- PASS: TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIStreamingPassthroughRepairsConcatenatedJSONDocumentsInSingleDataLine","Elapsed":0} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"=== RUN TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=2 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=2 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=2 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1442217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=2 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":2,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=2 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=2 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_2_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=2 conn_id=oa_ws_2_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1447937+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=2 conn_id=oa_ws_2_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1452974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.144Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] concatenated_json_repaired account_id=2 conn_id=oa_ws_2_1 documents=2 bytes=68274\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=2 conn_id=oa_ws_2_1 idx=1 type=response.in_progress bytes=68106 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=2 conn_id=oa_ws_2_1 idx=1 event_idx=1 event_type=response.in_progress buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=2 conn_id=oa_ws_2_1 idx=2 type=response.output_item.added bytes=168 token=false terminal=false buffered_pending=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=2 conn_id=oa_ws_2_1 idx=2 event_idx=2 event_type=response.output_item.added buffer_size=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=2 conn_id=oa_ws_2_1 idx=3 type=response.completed bytes=158 token=false terminal=true buffered_pending=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_flush account_id=2 conn_id=oa_ws_2_1 reason=response.completed flushed=2 total_flushed=2 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=2 conn_id=oa_ws_2_1 response_id=resp_large stream=true duration_ms=1 events=3 token_events=0 terminal_events=1 buffered_events=2 buffered_flushed=2 first_event=response.in_progress last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1456807+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.145Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=2 request_id=resp_large stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Output":"--- PASS: TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingRepairsConcatenatedJSONDocumentsInSingleMessage","Elapsed":0} {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream"} {"Time":"2026-09-12T11:38:49.1461827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"=== RUN TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.146Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.146Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.146Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_4_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4 conn_id=oa_ws_4_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1477121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.147Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4 conn_id=oa_ws_4_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.159Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_event_json account_id=4 conn_id=oa_ws_4_1 event_type=response.in_progress bytes=68121 wrote_downstream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.159Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=4 attempt=1 reason=invalid_event_json\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Output":"--- PASS: TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedTypedEventBeforeWritingDownstream","Elapsed":0.01} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream"} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"=== RUN TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1592271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.159Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1602232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1607262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1607262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1607262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_4_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4 conn_id=oa_ws_4_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4 conn_id=oa_ws_4_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_event_json account_id=4 conn_id=oa_ws_4_1 event_type=unknown bytes=8 wrote_downstream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=4 attempt=1 reason=invalid_event_json\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Output":"--- PASS: TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedUntypedMessageBeforeWritingDownstream","Elapsed":0} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"=== RUN TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5 conn_id=oa_ws_5_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5 conn_id=oa_ws_5_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.160Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5 conn_id=oa_ws_5_1 idx=1 type=response.output_text.delta bytes=70 token=true terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.161Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_event_json account_id=5 conn_id=oa_ws_5_1 event_type=response.in_progress bytes=46 wrote_downstream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Output":"--- PASS: TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2RejectsMalformedEventAfterWritingDownstream","Elapsed":0} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit"} {"Time":"2026-09-12T11:38:49.1614614+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Output":"=== RUN TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Output":"--- PASS: TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit (0.09s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSplitOpenAIConcatenatedJSONDocumentsRejectsPayloadOverRepairLimit","Elapsed":0.09} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"=== RUN TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=3 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=3 account_type=apikey model=gpt-5.6-sol stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=3 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=3 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=78 payload_key_sizes=type:15,model:11,input:5,stream:1 input_summary=- stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":3,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=3 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=3 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_3_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=3 conn_id=oa_ws_3_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=3 conn_id=oa_ws_3_1 stream=true payload_bytes=78 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2489035+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] concatenated_json_repaired account_id=3 conn_id=oa_ws_3_1 documents=2 bytes=180\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=3 conn_id=oa_ws_3_1 idx=1 type=response.completed bytes=113 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=3 conn_id=oa_ws_3_1 response_id=resp_terminal_tail stream=true duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:49.248Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=3 request_id=resp_terminal_tail stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Output":"--- PASS: TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSv2StreamingBreaksConnectionWhenTerminalHasTrailingDocument","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Output":"=== RUN TestSnapshotOpenAICompatibilityFallbackMetrics\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Output":"--- PASS: TestSnapshotOpenAICompatibilityFallbackMetrics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSnapshotOpenAICompatibilityFallbackMetrics","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/openai_api_key","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/compatible_provider","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/anthropic_account","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account","Output":"=== RUN TestOpenAICompatibleModelNotFound400FailoverScope/missing_account\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope/missing_account (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope/missing_account","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Output":"--- PASS: TestOpenAICompatibleModelNotFound400FailoverScope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400FailoverScope","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Output":"=== RUN TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Output":"--- PASS: TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatibleModelNotFound400WithoutManagedCandidatesRemainsTerminal","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Output":"=== RUN TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Output":"--- PASS: TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFailoverOpenAIUpstreamHTTPError_ModelNotFoundIsNextAccountEligible","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Output":"=== RUN TestIsOpenAIDeterministicClientError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Output":"--- PASS: TestIsOpenAIDeterministicClientError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIDeterministicClientError","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/full_metadata","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/upstream_type_preserved","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/empty_body_falls_back","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body","Output":"=== RUN TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape/sanitized_message_wins_over_raw_body","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Output":"--- PASS: TestWriteOpenAIUpstreamClientError_PayloadShape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIUpstreamClientError_PayloadShape","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Output":"=== RUN TestOpenAIVisibleOutputClassification\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Output":"=== RUN TestOpenAIVisibleOutputClassification/keepalive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Output":"--- PASS: TestOpenAIVisibleOutputClassification/keepalive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/keepalive","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Output":"=== RUN TestOpenAIVisibleOutputClassification/created\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Output":"--- PASS: TestOpenAIVisibleOutputClassification/created (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/created","Elapsed":0} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item"} {"Time":"2026-09-12T11:38:49.2499028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item","Output":"=== RUN TestOpenAIVisibleOutputClassification/empty_output_item\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item","Output":"--- PASS: TestOpenAIVisibleOutputClassification/empty_output_item (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_output_item","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta","Output":"=== RUN TestOpenAIVisibleOutputClassification/empty_delta\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta","Output":"--- PASS: TestOpenAIVisibleOutputClassification/empty_delta (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_delta","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta","Output":"=== RUN TestOpenAIVisibleOutputClassification/text_delta\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta","Output":"--- PASS: TestOpenAIVisibleOutputClassification/text_delta (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/text_delta","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments","Output":"=== RUN TestOpenAIVisibleOutputClassification/tool_arguments\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments","Output":"--- PASS: TestOpenAIVisibleOutputClassification/tool_arguments (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/tool_arguments","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image","Output":"=== RUN TestOpenAIVisibleOutputClassification/partial_image\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image","Output":"--- PASS: TestOpenAIVisibleOutputClassification/partial_image (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/partial_image","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item","Output":"=== RUN TestOpenAIVisibleOutputClassification/completed_image_item\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item","Output":"--- PASS: TestOpenAIVisibleOutputClassification/completed_image_item (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_image_item","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed","Output":"=== RUN TestOpenAIVisibleOutputClassification/empty_completed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed","Output":"--- PASS: TestOpenAIVisibleOutputClassification/empty_completed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/empty_completed","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only","Output":"=== RUN TestOpenAIVisibleOutputClassification/completed_with_output_usage_only\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only","Output":"--- PASS: TestOpenAIVisibleOutputClassification/completed_with_output_usage_only (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_output_usage_only","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text","Output":"=== RUN TestOpenAIVisibleOutputClassification/completed_with_text\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text","Output":"--- PASS: TestOpenAIVisibleOutputClassification/completed_with_text (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/completed_with_text","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker","Output":"=== RUN TestOpenAIVisibleOutputClassification/done_marker\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker","Output":"--- PASS: TestOpenAIVisibleOutputClassification/done_marker (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification/done_marker","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Output":"--- PASS: TestOpenAIVisibleOutputClassification (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIVisibleOutputClassification","Elapsed":0} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtVisibleOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native"} {"Time":"2026-09-12T11:38:49.2513615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtVisibleOutput/native\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtVisibleOutput/native (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/native","Elapsed":0.12} {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough"} {"Time":"2026-09-12T11:38:49.3717632+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput/passthrough","Elapsed":0.12} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtVisibleOutput (0.25s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtVisibleOutput","Elapsed":0.25} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage"} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtCompletedImage\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native"} {"Time":"2026-09-12T11:38:49.4965607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtCompletedImage/native\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtCompletedImage/native (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/native","Elapsed":0.12} {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough"} {"Time":"2026-09-12T11:38:49.6172919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough","Output":"=== RUN TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage/passthrough","Elapsed":0.12} {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Output":"--- PASS: TestOpenAIResponsesTTFTStartsAtCompletedImage (0.24s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTStartsAtCompletedImage","Elapsed":0.24} {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout"} {"Time":"2026-09-12T11:38:49.7375211+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Output":"=== RUN TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:50.7380138+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:50.738Z\",\"msg\":\"OpenAI first output timeout: account=1 model=test-model effort= phase=semantic_output elapsed=1.0004927s limit=1s\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Output":"--- PASS: TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAINativeMetadataDoesNotDisarmFirstOutputTimeout","Elapsed":1.2} {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput"} {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Output":"=== RUN TestOpenAIResponsesTTFTDefaultsToSemanticOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native"} {"Time":"2026-09-12T11:38:50.9378677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native","Output":"=== RUN TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native","Output":"--- PASS: TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/native","Elapsed":0.12} {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough"} {"Time":"2026-09-12T11:38:51.0581713+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough","Output":"=== RUN TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough","Output":"--- PASS: TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput/passthrough","Elapsed":0.12} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Output":"--- PASS: TestOpenAIResponsesTTFTDefaultsToSemanticOutput (0.24s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesTTFTDefaultsToSemanticOutput","Elapsed":0.24} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Hit","Elapsed":0} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1786147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_QuotaAutoPausedMiss","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_RateLimitedMiss","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_DBRuntimeRecheckRateLimitedMiss","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_Excluded","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_APIKeyForceHTTPHit","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_OAuthForceHTTPIgnored","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_BusyKeepsSticky","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky","Output":"=== RUN TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky","Output":"--- PASS: TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_SelectAccountByPreviousResponseID_CapabilityMismatchKeepsSticky","Elapsed":0} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close"} {"Time":"2026-09-12T11:38:51.1791547+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close (0.03s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/inter-turn_idle_sends_normal_close","Elapsed":0.03} {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close"} {"Time":"2026-09-12T11:38:51.2048692+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close (0.03s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/first_message_timeout_sends_policy_close","Elapsed":0.03} {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close"} {"Time":"2026-09-12T11:38:51.2309912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close","Output":"=== RUN TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames/lease_loss_sends_retry_close","Elapsed":0} {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames","Output":"--- PASS: TestReadOpenAIWSClientMessage_ControlCloseFrames (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ControlCloseFrames","Elapsed":0.05} {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead"} {"Time":"2026-09-12T11:38:51.2315045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Output":"=== RUN TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2320174+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Output":"--- PASS: TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReadOpenAIWSClientMessage_ParentCancellationStillJoinsRead","Elapsed":0} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Elapsed":0} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Elapsed":0} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Output":"=== RUN TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Output":"--- PASS: TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity"} {"Time":"2026-09-12T11:38:51.2325283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Output":"=== RUN TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Output":"--- PASS: TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientConn_DoesNotSupportIdlePingWithoutReader","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Output":"=== RUN TestClassifyOpenAIWSAcquireError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required","Output":"=== RUN TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_426_upgrade_required","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full","Output":"=== RUN TestClassifyOpenAIWSAcquireError/queue_full\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/queue_full (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/queue_full","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable","Output":"=== RUN TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/preferred_conn_unavailable","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout","Output":"=== RUN TestClassifyOpenAIWSAcquireError/acquire_timeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/acquire_timeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/acquire_timeout","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401","Output":"=== RUN TestClassifyOpenAIWSAcquireError/auth_failed_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/auth_failed_401 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/auth_failed_401","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited","Output":"=== RUN TestClassifyOpenAIWSAcquireError/upstream_rate_limited\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/upstream_rate_limited (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_rate_limited","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx","Output":"=== RUN TestClassifyOpenAIWSAcquireError/upstream_5xx\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/upstream_5xx (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/upstream_5xx","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status","Output":"=== RUN TestClassifyOpenAIWSAcquireError/dial_failed_other_status\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/dial_failed_other_status (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/dial_failed_other_status","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Output":"=== RUN TestClassifyOpenAIWSAcquireError/other\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/other (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/other","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Output":"=== RUN TestClassifyOpenAIWSAcquireError/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Output":"--- PASS: TestClassifyOpenAIWSAcquireError/nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError/nil","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Output":"--- PASS: TestClassifyOpenAIWSAcquireError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSAcquireError","Elapsed":0} {"Time":"2026-09-12T11:38:51.2330407+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Output":"=== RUN TestClassifyOpenAIWSDialError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished","Output":"=== RUN TestClassifyOpenAIWSDialError/handshake_not_finished\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished","Output":"--- PASS: TestClassifyOpenAIWSDialError/handshake_not_finished (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/handshake_not_finished","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline","Output":"=== RUN TestClassifyOpenAIWSDialError/context_deadline\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline","Output":"--- PASS: TestClassifyOpenAIWSDialError/context_deadline (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError/context_deadline","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Output":"--- PASS: TestClassifyOpenAIWSDialError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSDialError","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Output":"=== RUN TestSummarizeOpenAIWSDialError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Output":"--- PASS: TestSummarizeOpenAIWSDialError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSummarizeOpenAIWSDialError","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Output":"=== RUN TestClassifyOpenAIWSErrorEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Output":"--- PASS: TestClassifyOpenAIWSErrorEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSErrorEvent","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Output":"=== RUN TestClassifyOpenAIWSReconnectReason\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Output":"--- PASS: TestClassifyOpenAIWSReconnectReason (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReconnectReason","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Output":"=== RUN TestOpenAIWSErrorHTTPStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Output":"--- PASS: TestOpenAIWSErrorHTTPStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatus","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/previous_response_not_found","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/auth_failed_uses_dial_status","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved","Output":"=== RUN TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse/non_fallback_error_not_resolved","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Output":"--- PASS: TestResolveOpenAIWSFallbackErrorResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSFallbackErrorResponse","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Output":"=== RUN TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Output":"--- PASS: TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseMarksDefaultClientRouteUnknown","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Output":"=== RUN TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Output":"--- PASS: TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIWSFallbackErrorResponseKeepsManagedProxy","Elapsed":0} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling"} {"Time":"2026-09-12T11:38:51.2335509+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Output":"=== RUN TestOpenAIWSFallbackCooling\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Output":"--- PASS: TestOpenAIWSFallbackCooling (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSFallbackCooling","Elapsed":1.2} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Output":"=== RUN TestOpenAIWSRetryBackoff\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Output":"--- PASS: TestOpenAIWSRetryBackoff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryBackoff","Elapsed":0} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Output":"=== RUN TestOpenAIWSRetryTotalBudget\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Output":"--- PASS: TestOpenAIWSRetryTotalBudget (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryTotalBudget","Elapsed":0} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Output":"=== RUN TestClassifyOpenAIWSReadFallbackReason\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Output":"--- PASS: TestClassifyOpenAIWSReadFallbackReason (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestClassifyOpenAIWSReadFallbackReason","Elapsed":0} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Output":"=== RUN TestOpenAIWSStoreDisabledConnMode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Output":"--- PASS: TestOpenAIWSStoreDisabledConnMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStoreDisabledConnMode","Elapsed":0} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Output":"=== RUN TestOpenAIWSRetryMetricsSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Output":"--- PASS: TestOpenAIWSRetryMetricsSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRetryMetricsSnapshot","Elapsed":0} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Output":"=== RUN TestShouldLogOpenAIWSPayloadSchema\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Output":"--- PASS: TestShouldLogOpenAIWSPayloadSchema (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldLogOpenAIWSPayloadSchema","Elapsed":0} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"=== RUN TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=9101 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_mode_ctx_pool model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=9101 account_type=apikey model=gpt-5.5 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=9101 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=9101 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=105 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":9101,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=9101 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=9101 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_9101_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=9101 conn_id=oa_ws_9101_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=9101 conn_id=oa_ws_9101_1 stream=true payload_bytes=105 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9101 conn_id=oa_ws_9101_1 idx=1 type=response.created bytes=79 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=9101 conn_id=oa_ws_9101_1 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9101 conn_id=oa_ws_9101_1 idx=2 type=response.output_text.delta bytes=55 token=true terminal=false buffered_pending=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_flush account_id=9101 conn_id=oa_ws_9101_1 reason=response.output_text.delta flushed=1 total_flushed=1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.4494805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.449Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] client_disconnected account_id=9101 conn_id=oa_ws_9101_1 cause=request_context_canceled events=2 token_events=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.500Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9101 conn_id=oa_ws_9101_1 idx=3 type=response.completed bytes=126 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.500Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=9101 conn_id=oa_ws_9101_1 response_id=resp_cancel_1 stream=true duration_ms=65 events=3 token_events=1 terminal_events=1 buffered_events=1 buffered_flushed=1 first_event=response.created last_event=response.completed first_token_ms=13 wrote_downstream=true client_disconnected=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.500Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=9101 request_id=resp_cancel_1 stream=true has_first_token_ms=true first_token_ms=13 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Output":"--- PASS: TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure (0.07s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_ClientCancellationDrainsWithoutSyntheticFailure","Elapsed":0.07} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Output":"=== RUN TestParseOpenAIWSEventEnvelope\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Output":"--- PASS: TestParseOpenAIWSEventEnvelope (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSEventEnvelope","Elapsed":0} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Output":"=== RUN TestParseOpenAIWSResponseUsageFromCompletedEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Output":"--- PASS: TestParseOpenAIWSResponseUsageFromCompletedEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestParseOpenAIWSResponseUsageFromCompletedEvent","Elapsed":0} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"=== RUN TestOpenAIWSEventShouldParseUsageTerminalEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"=== PAUSE TestOpenAIWSEventShouldParseUsageTerminalEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Output":"=== RUN TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Output":"--- PASS: TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEventHelpers_ConsistentWithWrapper","Elapsed":0} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Output":"=== RUN TestOpenAIWSMessageLikelyContainsToolCalls\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Output":"--- PASS: TestOpenAIWSMessageLikelyContainsToolCalls (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSMessageLikelyContainsToolCalls","Elapsed":0} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Output":"=== RUN TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Output":"--- PASS: TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestReplaceOpenAIWSMessageModel_OptimizedStillCorrect","Elapsed":0} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/pre-canceled_ordinary_context_is_canceled_before_return","Elapsed":0} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive"} {"Time":"2026-09-12T11:38:52.5007482+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/lease_loss_keeps_current_write_alive","Elapsed":0.02} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause","Output":"=== RUN TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership/ordinary_cancellation_is_direct_and_preserves_cause","Elapsed":0} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership","Output":"--- PASS: TestOpenAIWSDownstreamWriteContext_CancellationOwnership (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDownstreamWriteContext_CancellationOwnership","Elapsed":0.02} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns"} {"Time":"2026-09-12T11:38:52.5212021+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":114,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=114 turn=1 conn_id=oa_ws_114_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=1 conn_id=oa_ws_114_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5217588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.521Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=1 conn_id=oa_ws_114_1 response_id=resp_ingress_turn_1 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.output_item.done last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=114 turn=1 next_turn=2 conn_id=oa_ws_114_1 previous_response_id=resp_ingress_turn_1 previous_response_id_kind=response_id last_turn_response_id=resp_ingress_turn_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=114 turn=2 conn_id=oa_ws_114_1 previous_response_id=resp_ingress_turn_1 previous_response_id_kind=response_id last_turn_response_id=resp_ingress_turn_1 chained_from_last=true preferred_conn_id=oa_ws_114_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=2 conn_id=oa_ws_114_1 payload_bytes=104\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=2 conn_id=oa_ws_114_1 response_id=resp_ingress_turn_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=114 conn_id=oa_ws_114_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.522Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=114 conn_id=oa_ws_114_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_KeepLeaseAcrossTurns","Elapsed":0} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose"} {"Time":"2026-09-12T11:38:52.5222642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":118,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=118 turn=1 conn_id=oa_ws_118_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=1 conn_id=oa_ws_118_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=118 turn=1 conn_id=oa_ws_118_1 response_id=resp_lease_loss duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5232844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.523Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=118 conn_id=oa_ws_118_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_LeaseLossSendsRetryClose","Elapsed":0} {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession"} {"Time":"2026-09-12T11:38:52.5238005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":116,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=116 turn=1 conn_id=oa_ws_116_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=116 turn=1 conn_id=oa_ws_116_1 payload_bytes=73\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:52.5243066+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:52.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=116 turn=1 conn_id=oa_ws_116_1 response_id=resp_idle_timeout duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.524Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_inter_turn_idle_timeout account_id=116 timeout_seconds=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.524Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=116 conn_id=oa_ws_116_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5247981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_IdleTimeoutReleasesStoreDisabledSession","Elapsed":1} {"Time":"2026-09-12T11:38:53.5254045+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel"} {"Time":"2026-09-12T11:38:53.5254045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5259458+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.525Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":115,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.525Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.525Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=115 turn=1 conn_id=oa_ws_115_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=1 conn_id=oa_ws_115_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=1 conn_id=oa_ws_115_1 response_id=resp_omit_model_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=115 turn=1 next_turn=2 conn_id=oa_ws_115_1 previous_response_id=resp_omit_model_1 previous_response_id_kind=response_id last_turn_response_id=resp_omit_model_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5264642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.526Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=115 turn=2 conn_id=oa_ws_115_1 previous_response_id=resp_omit_model_1 previous_response_id_kind=response_id last_turn_response_id=resp_omit_model_1 chained_from_last=true preferred_conn_id=oa_ws_115_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=2 conn_id=oa_ws_115_1 payload_bytes=102\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=2 conn_id=oa_ws_115_1 response_id=resp_omit_model_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=115 conn_id=oa_ws_115_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.527013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.527Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=115 conn_id=oa_ws_115_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_FollowupCreateCanOmitModel","Elapsed":0} {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite"} {"Time":"2026-09-12T11:38:53.527558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5280736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_tool_injected account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5280736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_tool_choice_auto account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5280736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_codex_image_bridge_instructions_added account_id=31\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":31,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=31 account_type=oauth transport=responses_websockets_v2 ws_host=chatgpt.com ws_path=/backend-api/codex/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=31 account_type=oauth transport=responses_websockets_v2 ws_host=chatgpt.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=31 turn=1 conn_id=oa_ws_31_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=1 conn_id=oa_ws_31_1 payload_bytes=672\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5285952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.528Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=1 conn_id=oa_ws_31_1 response_id=resp_codex_image_bridge duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=31 turn=1 next_turn=2 conn_id=oa_ws_31_1 previous_response_id=resp_codex_image_bridge previous_response_id_kind=response_id last_turn_response_id=resp_codex_image_bridge chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=31 turn=2 conn_id=oa_ws_31_1 action=drop_previous_response_id_full_create reason=non_input_changed previous_response_id=resp_codex_image_bridge expected_previous_response_id=resp_codex_image_bridge has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=2 conn_id=oa_ws_31_1 payload_bytes=648\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=2 conn_id=oa_ws_31_1 response_id=resp_codex_image_lite duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=31 turn=2 next_turn=3 conn_id=oa_ws_31_1 previous_response_id=resp_codex_image_lite previous_response_id_kind=response_id last_turn_response_id=resp_codex_image_lite chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5291102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=31 turn=3 conn_id=oa_ws_31_1 action=drop_previous_response_id_full_create reason=non_input_changed previous_response_id=resp_codex_image_lite expected_previous_response_id=resp_codex_image_lite has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5296303+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=31 turn=3 conn_id=oa_ws_31_1 payload_bytes=543\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5296303+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=31 turn=3 conn_id=oa_ws_31_1 response_id=resp_codex_image_function duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5296303+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=31 conn_id=oa_ws_31_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_CodexImageBridgeRespectsResponsesLite","Elapsed":0} {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions"} {"Time":"2026-09-12T11:38:53.530149+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":441,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=dedicated store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=441 turn=1 conn_id=oa_ws_441_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=441 turn=1 conn_id=oa_ws_441_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5309982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=441 turn=1 conn_id=oa_ws_441_1 response_id=resp_dedicated_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5315656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.531Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=441 conn_id=oa_ws_441_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5315656+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.531Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=441 conn_id=oa_ws_441_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":441,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=dedicated store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=441 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5320894+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=441 turn=1 conn_id=oa_ws_441_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=441 turn=1 conn_id=oa_ws_441_2 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=441 turn=1 conn_id=oa_ws_441_2 response_id=resp_dedicated_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=441 conn_id=oa_ws_441_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.532Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=441 conn_id=oa_ws_441_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_DedicatedModeDoesNotReuseConnAcrossSessions","Elapsed":0} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter"} {"Time":"2026-09-12T11:38:53.5326125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=452 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=111\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=452 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":452,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=452 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=relay_start direction=- msg_type=text bytes=115 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=115 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=452 turn=1 request_id=resp_passthrough_turn_1 terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=2 output_tokens=3 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5336607+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=452 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.533Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=452 request_id=resp_passthrough_turn_1 terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughModeRelaysByCaddyAdapter","Elapsed":0} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create"} {"Time":"2026-09-12T11:38:53.5341775+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=44\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=44 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=44 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5348158+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.534Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/small_response_create","Elapsed":0} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create"} {"Time":"2026-09-12T11:38:53.5353328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.535Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=resp_previous first_message_type=text first_message_bytes=83\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=83 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=83 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5364762+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.536Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.537Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/continuation_response_create","Elapsed":0} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type"} {"Time":"2026-09-12T11:38:53.5370615+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=- previous_response_id=- first_message_type=text first_message_bytes=70\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=70 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5381513+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=70 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=- turn_upstream_model=- duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5387196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.538Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/other_event_type","Elapsed":0} {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data"} {"Time":"2026-09-12T11:38:53.5392372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.539Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=- previous_response_id=- first_message_type=text first_message_bytes=70\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/malformed_data","Elapsed":0} {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type"} {"Time":"2026-09-12T11:38:53.5402981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=69\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5408159+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.540Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=69 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=69 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.541Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5413378+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_type","Elapsed":0} {"Time":"2026-09-12T11:38:53.5418534+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id"} {"Time":"2026-09-12T11:38:53.5418534+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=100\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=100 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=100 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5423705+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_duplicate_keys terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.542Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_duplicate_keys terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries/duplicate_previous_response_id","Elapsed":0} {"Time":"2026-09-12T11:38:53.5428874+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughBridgeBoundaries","Elapsed":0.01} {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState"} {"Time":"2026-09-12T11:38:53.5434408+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=453 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=538\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=453 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":453,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=453 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_start direction=- msg_type=text bytes=538 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5441139+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=538 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=453 turn=1 request_id=resp_passthrough_headers terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=EOF\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=453 stage=relay_complete direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5447852+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.544Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=453 request_id=resp_passthrough_headers terminal_event=response.completed duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PassthroughHeadersUsePromptCacheAndTurnState","Elapsed":0} {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream"} {"Time":"2026-09-12T11:38:53.5453161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5458471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.545Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=552 account_type=apikey payload_bytes=173 threshold_bytes=15728640 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.546Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":552,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.546Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=552 turn=1 response_id=resp_http_bridge_1 payload_bytes=173 duration_ms=0 events=2 token_events=1 terminal_events=1 first_event=response.output_text.delta last_event=response.done first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.546Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=552 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_HTTPBridgeModeRelaysHTTPStream","Elapsed":0} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation"} {"Time":"2026-09-12T11:38:53.5463638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ModeOffReturnsPolicyViolation","Elapsed":0} {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate"} {"Time":"2026-09-12T11:38:53.5474013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5479227+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.547Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":140,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.547Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=140 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=140 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=140 turn=1 conn_id=oa_ws_140_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=140 turn=1 conn_id=oa_ws_140_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=140 turn=1 conn_id=oa_ws_140_1 response_id=resp_preflight_rewrite_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=140 turn=1 next_turn=2 conn_id=oa_ws_140_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_preflight_rewrite_1 chained_from_last=false has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=140 turn=2 conn_id=oa_ws_140_1 action=drop_previous_response_id_full_create reason=previous_response_id_mismatch previous_response_id=resp_stale_external expected_previous_response_id=resp_preflight_rewrite_1 has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=140 turn=2 conn_id=oa_ws_140_1 payload_bytes=157\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5484446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=140 turn=2 conn_id=oa_ws_140_1 response_id=resp_preflight_rewrite_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=140 conn_id=oa_ws_140_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.548Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=140 conn_id=oa_ws_140_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropToFullCreate","Elapsed":0} {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects"} {"Time":"2026-09-12T11:38:53.5489633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.549Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":142,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=142 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=142 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=142 turn=1 conn_id=oa_ws_142_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=142 turn=1 conn_id=oa_ws_142_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5501396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=142 turn=1 conn_id=oa_ws_142_1 response_id=resp_turn_ping_drop_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=142 turn=1 next_turn=2 conn_id=oa_ws_142_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_drop_1 chained_from_last=false has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_strict_eval account_id=142 turn=2 conn_id=oa_ws_142_1 action=drop_previous_response_id_full_create reason=previous_response_id_mismatch previous_response_id=resp_stale_external expected_previous_response_id=resp_turn_ping_drop_1 has_function_call_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=142 turn=2 conn_id=oa_ws_142_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=142 conn_id=oa_ws_142_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=142 turn=2 conn_id=oa_ws_142_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=142 turn=2 conn_id=oa_ws_142_2 payload_bytes=157\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5505695+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.550Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=142 turn=2 conn_id=oa_ws_142_2 response_id=resp_turn_ping_drop_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.551Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=142 conn_id=oa_ws_142_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.551Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=142 conn_id=oa_ws_142_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponseStrictDropBeforePreflightPingFailReconnects","Elapsed":0} {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval"} {"Time":"2026-09-12T11:38:53.5510716+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":143,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=143 turn=1 conn_id=oa_ws_143_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=1 conn_id=oa_ws_143_1 payload_bytes=72\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=1 conn_id=oa_ws_143_1 response_id=resp_store_enabled_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=143 turn=1 next_turn=2 conn_id=oa_ws_143_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_store_enabled_1 chained_from_last=false has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5529646+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=143 turn=2 conn_id=oa_ws_143_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_store_enabled_1 chained_from_last=false preferred_conn_id=oa_ws_143_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=2 conn_id=oa_ws_143_1 payload_bytes=117\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.553Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=2 conn_id=oa_ws_143_1 response_id=resp_store_enabled_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.553Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=143 conn_id=oa_ws_143_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5535372+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.553Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=143 conn_id=oa_ws_143_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreEnabledSkipsStrictPrevResponseEval","Elapsed":0} {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput"} {"Time":"2026-09-12T11:38:53.5540405+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":141,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=141 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=141 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=141 turn=1 conn_id=oa_ws_141_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=141 turn=1 conn_id=oa_ws_141_1 payload_bytes=73\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5547183+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.554Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=141 turn=1 conn_id=oa_ws_141_1 response_id=resp_preflight_skip_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=141 turn=1 next_turn=2 conn_id=oa_ws_141_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_preflight_skip_1 chained_from_last=false has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=141 turn=2 conn_id=oa_ws_141_1 previous_response_id=resp_stale_external previous_response_id_kind=response_id last_turn_response_id=resp_preflight_skip_1 chained_from_last=false preferred_conn_id=oa_ws_141_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=141 turn=2 conn_id=oa_ws_141_1 payload_bytes=193\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=141 turn=2 conn_id=oa_ws_141_1 response_id=resp_preflight_skip_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=141 conn_id=oa_ws_141_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.555Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=141 conn_id=oa_ws_141_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPrevResponsePreflightSkipForFunctionCallOutput","Elapsed":0} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID"} {"Time":"2026-09-12T11:38:53.5552398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5562915+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":143,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=143 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=143 turn=1 conn_id=oa_ws_143_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=1 conn_id=oa_ws_143_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=1 conn_id=oa_ws_143_1 response_id=resp_auto_prev_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_function_call_output_prev_infer account_id=143 turn=2 conn_id=oa_ws_143_1 action=set_previous_response_id previous_response_id=resp_auto_prev_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=143 turn=2 conn_id=oa_ws_143_1 previous_response_id=resp_auto_prev_1 previous_response_id_kind=response_id last_turn_response_id=resp_auto_prev_1 chained_from_last=true preferred_conn_id=oa_ws_143_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=143 turn=2 conn_id=oa_ws_143_1 payload_bytes=195\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5568393+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.556Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=143 turn=2 conn_id=oa_ws_143_1 response_id=resp_auto_prev_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.557Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=143 conn_id=oa_ws_143_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.557Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=143 conn_id=oa_ws_143_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5573595+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:38:53.5578771+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID"} {"Time":"2026-09-12T11:38:53.5578771+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":145,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=145 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=145 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=145 turn=1 conn_id=oa_ws_145_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=145 turn=1 conn_id=oa_ws_145_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=145 turn=1 conn_id=oa_ws_145_1 response_id=resp_tool_search_prev_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_function_call_output_prev_infer account_id=145 turn=2 conn_id=oa_ws_145_1 action=set_previous_response_id previous_response_id=resp_tool_search_prev_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=145 turn=2 conn_id=oa_ws_145_1 previous_response_id=resp_tool_search_prev_1 previous_response_id_kind=response_id last_turn_response_id=resp_tool_search_prev_1 chained_from_last=true preferred_conn_id=oa_ws_145_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5590028+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=145 turn=2 conn_id=oa_ws_145_1 payload_bytes=202\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=145 turn=2 conn_id=oa_ws_145_1 response_id=resp_tool_search_prev_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=145 conn_id=oa_ws_145_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.559Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=145 conn_id=oa_ws_145_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledToolSearchOutputAutoAttachesPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing"} {"Time":"2026-09-12T11:38:53.5595228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":144,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=144 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=144 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=144 turn=1 conn_id=oa_ws_144_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=144 turn=1 conn_id=oa_ws_144_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=144 turn=1 conn_id=oa_ws_144_1 response_id=- duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5605571+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=144 turn=2 conn_id=oa_ws_144_1 payload_bytes=158\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.560Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=144 turn=2 conn_id=oa_ws_144_1 response_id=resp_auto_prev_skip_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.561Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=144 conn_id=oa_ws_144_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.561Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=144 conn_id=oa_ws_144_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenLastResponseIDMissing","Elapsed":0} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent"} {"Time":"2026-09-12T11:38:53.5611297+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":114,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=114 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=114 turn=1 conn_id=oa_ws_114_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=1 conn_id=oa_ws_114_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5622377+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=1 conn_id=oa_ws_114_1 response_id=resp_auto_prev_ctx_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5627455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=114 turn=2 conn_id=oa_ws_114_1 payload_bytes=314\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5627455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=114 turn=2 conn_id=oa_ws_114_1 response_id=resp_auto_prev_ctx_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5627455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=114 conn_id=oa_ws_114_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.562Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=114 conn_id=oa_ws_114_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputSkipsAutoAttachWhenToolCallContextPresent","Elapsed":0} {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent"} {"Time":"2026-09-12T11:38:53.5632723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.563Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":115,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=115 turn=1 conn_id=oa_ws_115_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=1 conn_id=oa_ws_115_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=1 conn_id=oa_ws_115_1 response_id=resp_auto_prev_ref_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_function_call_output_prev_infer account_id=115 turn=2 conn_id=oa_ws_115_1 action=set_previous_response_id previous_response_id=resp_auto_prev_ref_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=115 turn=2 conn_id=oa_ws_115_1 previous_response_id=resp_auto_prev_ref_1 previous_response_id_kind=response_id last_turn_response_id=resp_auto_prev_ref_1 chained_from_last=true preferred_conn_id=oa_ws_115_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=2 conn_id=oa_ws_115_1 payload_bytes=324\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5642951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=2 conn_id=oa_ws_115_1 response_id=resp_auto_prev_ref_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=115 conn_id=oa_ws_115_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.564Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=115 conn_id=oa_ws_115_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledFunctionCallOutputAutoAttachWhenOnlyItemReferencesPresent","Elapsed":0} {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn"} {"Time":"2026-09-12T11:38:53.5648104+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":116,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=116 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=116 turn=1 conn_id=oa_ws_116_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=116 turn=1 conn_id=oa_ws_116_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=116 turn=1 conn_id=oa_ws_116_1 response_id=resp_turn_ping_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=116 turn=1 next_turn=2 conn_id=oa_ws_116_1 previous_response_id=resp_turn_ping_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=116 turn=2 conn_id=oa_ws_116_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5658384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.565Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=116 conn_id=oa_ws_116_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=116 turn=2 conn_id=oa_ws_116_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=116 turn=2 conn_id=oa_ws_116_2 previous_response_id=resp_turn_ping_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_1 chained_from_last=true preferred_conn_id=- header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=116 turn=2 conn_id=oa_ws_116_2 payload_bytes=101\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=116 turn=2 conn_id=oa_ws_116_2 response_id=resp_turn_ping_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=116 conn_id=oa_ws_116_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.566Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=116 conn_id=oa_ws_116_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreflightPingFailReconnectsBeforeTurn","Elapsed":0} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects"} {"Time":"2026-09-12T11:38:53.5663535+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":121,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=121 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=121 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=121 turn=1 conn_id=oa_ws_121_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=121 turn=1 conn_id=oa_ws_121_1 payload_bytes=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=121 turn=1 conn_id=oa_ws_121_1 response_id=resp_turn_ping_strict_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=121 turn=1 next_turn=2 conn_id=oa_ws_121_1 previous_response_id=resp_turn_ping_strict_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_strict_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5676276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=121 turn=2 conn_id=oa_ws_121_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.567Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery account_id=121 turn=2 conn_id=oa_ws_121_1 action=drop_previous_response_id_retry previous_response_id=resp_turn_ping_strict_1 has_function_call_output=false has_replay_tool_context=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=121 conn_id=oa_ws_121_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=121 turn=2 conn_id=oa_ws_121_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=121 turn=2 conn_id=oa_ws_121_2 payload_bytes=157\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=121 turn=2 conn_id=oa_ws_121_2 response_id=resp_turn_ping_strict_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=121 conn_id=oa_ws_121_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.568Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=121 conn_id=oa_ws_121_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5681428+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreflightPingFailAutoRecoveryReconnects","Elapsed":0} {"Time":"2026-09-12T11:38:53.568661+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext"} {"Time":"2026-09-12T11:38:53.568661+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":128,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=128 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=128 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=128 turn=1 conn_id=oa_ws_128_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5691974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=128 turn=1 conn_id=oa_ws_128_1 payload_bytes=169\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=128 turn=1 conn_id=oa_ws_128_1 response_id=resp_turn_ping_replay_ctx_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=128 turn=1 next_turn=2 conn_id=oa_ws_128_1 previous_response_id=resp_turn_ping_replay_ctx_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_replay_ctx_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=128 turn=2 conn_id=oa_ws_128_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5697145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery account_id=128 turn=2 conn_id=oa_ws_128_1 action=drop_previous_response_id_retry previous_response_id=resp_turn_ping_replay_ctx_1 has_function_call_output=true has_replay_tool_context=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=128 conn_id=oa_ws_128_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=128 turn=2 conn_id=oa_ws_128_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=128 turn=2 conn_id=oa_ws_128_2 payload_bytes=343\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.569Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=128 turn=2 conn_id=oa_ws_128_2 response_id=resp_turn_ping_replay_ctx_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.570Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=128 conn_id=oa_ws_128_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.570Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=128 conn_id=oa_ws_128_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailReplaysFunctionCallOutputWithContext","Elapsed":0} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID"} {"Time":"2026-09-12T11:38:53.570228+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=129 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=129 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=129 turn=1 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=129 turn=1 conn_id=oa_ws_129_1 payload_bytes=235\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5714003+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.571Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=129 turn=1 conn_id=oa_ws_129_1 response_id=resp_turn_ping_replay_fc_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=129 turn=1 next_turn=2 conn_id=oa_ws_129_1 previous_response_id=resp_turn_ping_replay_fc_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_replay_fc_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=129 turn=2 conn_id=oa_ws_129_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery_skip account_id=129 turn=2 conn_id=oa_ws_129_1 reason=function_call_output_missing_replay_context action=fail_close previous_response_id=resp_turn_ping_replay_fc_1 has_replay_tool_context=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.572Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=129 conn_id=oa_ws_129_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenFunctionCallOutputNeedsPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput"} {"Time":"2026-09-12T11:38:53.5720172+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":130,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=130 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=130 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=130 turn=1 conn_id=oa_ws_130_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=130 turn=1 conn_id=oa_ws_130_1 payload_bytes=235\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5732161+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=130 turn=1 conn_id=oa_ws_130_1 response_id=resp_turn_ping_replay_only_fc_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=130 turn=1 next_turn=2 conn_id=oa_ws_130_1 previous_response_id=resp_turn_ping_replay_only_fc_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_ping_replay_only_fc_1 chained_from_last=true has_prompt_cache_key=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_preflight_ping_fail account_id=130 turn=2 conn_id=oa_ws_130_1 cause=preflight ping fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_preflight_ping_recovery_skip account_id=130 turn=2 conn_id=oa_ws_130_1 reason=function_call_output_missing_replay_context action=fail_close previous_response_id=resp_turn_ping_replay_only_fc_1 has_replay_tool_context=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.573Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=130 conn_id=oa_ws_130_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledPreflightPingFailClosesWhenReplayHasFunctionCallOutput","Elapsed":0} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce"} {"Time":"2026-09-12T11:38:53.573736+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":117,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=117 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=117 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=117 turn=1 conn_id=oa_ws_117_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=117 turn=1 conn_id=oa_ws_117_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5747774+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.574Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=117 turn=1 conn_id=oa_ws_117_1 response_id=resp_turn_write_retry_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=117 turn=1 next_turn=2 conn_id=oa_ws_117_1 previous_response_id=resp_turn_write_retry_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_write_retry_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=117 turn=2 conn_id=oa_ws_117_1 previous_response_id=resp_turn_write_retry_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_write_retry_1 chained_from_last=true preferred_conn_id=oa_ws_117_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_retry account_id=117 turn=2 retry=1 reason=write_upstream conn_id=oa_ws_117_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=117 conn_id=oa_ws_117_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=117 turn=2 conn_id=oa_ws_117_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=117 turn=2 conn_id=oa_ws_117_2 previous_response_id=resp_turn_write_retry_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_write_retry_1 chained_from_last=true preferred_conn_id=- header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=117 turn=2 conn_id=oa_ws_117_2 payload_bytes=108\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5752966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=117 turn=2 conn_id=oa_ws_117_2 response_id=resp_turn_write_retry_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=117 conn_id=oa_ws_117_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.575Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=117 conn_id=oa_ws_117_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_WriteFailBeforeDownstreamRetriesOnce","Elapsed":0} {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID"} {"Time":"2026-09-12T11:38:53.5758102+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":118,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=118 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_continuation_probe account_id=118 turn=1 previous_response_id=resp_seed_anchor previous_response_id_kind=response_id preferred_conn_id=- session_hash=c545638f3dcd... header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=118 turn=1 conn_id=oa_ws_118_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=118 turn=1 conn_id=oa_ws_118_1 previous_response_id=resp_seed_anchor previous_response_id_kind=response_id last_turn_response_id=- chained_from_last=false preferred_conn_id=- header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=1 conn_id=oa_ws_118_1 payload_bytes=101\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5768532+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.576Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=118 turn=1 conn_id=oa_ws_118_1 response_id=resp_turn_prev_recover_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=118 turn=1 next_turn=2 conn_id=oa_ws_118_1 previous_response_id=resp_turn_prev_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_recover_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=118 turn=2 conn_id=oa_ws_118_1 previous_response_id=resp_turn_prev_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_recover_1 chained_from_last=true preferred_conn_id=oa_ws_118_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=2 conn_id=oa_ws_118_1 payload_bytes=109\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recoverable account_id=118 turn=2 conn_id=oa_ws_118_1 idx=1 reason=previous_response_not_found code=previous_response_not_found type=invalid_request_err message=- previous_response_id=resp_turn_prev_recover_1 previous_response_id_kind=response_id response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery account_id=118 turn=2 conn_id=oa_ws_118_1 action=drop_previous_response_id retry=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=118 conn_id=oa_ws_118_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=118 turn=2 conn_id=oa_ws_118_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=118 turn=2 conn_id=oa_ws_118_2 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5773697+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=118 turn=2 conn_id=oa_ws_118_2 response_id=resp_turn_prev_recover_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5779119+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=118 conn_id=oa_ws_118_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5779119+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.577Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=118 conn_id=oa_ws_118_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoversByDroppingPrevID","Elapsed":0} {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery"} {"Time":"2026-09-12T11:38:53.5782587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":122,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=122 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=true has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=122 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=122 turn=1 conn_id=oa_ws_122_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=122 turn=1 conn_id=oa_ws_122_1 payload_bytes=158\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=122 turn=1 conn_id=oa_ws_122_1 response_id=resp_turn_prev_strict_recover_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":122,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=122 turn=1 next_turn=2 conn_id=oa_ws_122_1 previous_response_id=resp_turn_prev_strict_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_strict_recover_1 chained_from_last=true has_prompt_cache_key=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=122 turn=2 conn_id=oa_ws_122_1 previous_response_id=resp_turn_prev_strict_recover_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_strict_recover_1 chained_from_last=true preferred_conn_id=oa_ws_122_1 header_session_id=pk_strict_layer2 header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=122 turn=2 conn_id=oa_ws_122_1 payload_bytes=215\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5797248+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recoverable account_id=122 turn=2 conn_id=oa_ws_122_1 idx=1 reason=previous_response_not_found code=previous_response_not_found type=invalid_request_err message=missing strict anchor previous_response_id=resp_turn_prev_strict_recover_1 previous_response_id_kind=response_id response_id=- store_disabled=true has_prompt_cache_key=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.579Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery_layer2 account_id=122 turn=2 conn_id=oa_ws_122_1 store_disabled_conn_mode=off action=drop_previous_response_id_retry\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery account_id=122 turn=2 conn_id=oa_ws_122_1 action=drop_previous_response_id retry=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=122 conn_id=oa_ws_122_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=122 turn=2 conn_id=oa_ws_122_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=122 turn=2 conn_id=oa_ws_122_2 payload_bytes=195\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=122 turn=2 conn_id=oa_ws_122_2 response_id=resp_turn_prev_strict_recover_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=122 conn_id=oa_ws_122_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5802268+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.580Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=122 conn_id=oa_ws_122_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_StoreDisabledStrictAffinityPreviousResponseNotFoundLayer2Recovery","Elapsed":0} {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID"} {"Time":"2026-09-12T11:38:53.5808952+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.581Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":120,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.581Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=120 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.581Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=120 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=120 turn=1 conn_id=oa_ws_120_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=120 turn=1 conn_id=oa_ws_120_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5822919+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=120 turn=1 conn_id=oa_ws_120_1 response_id=resp_turn_prev_once_1 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_next_turn_chain account_id=120 turn=1 next_turn=2 conn_id=oa_ws_120_1 previous_response_id=resp_turn_prev_once_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_once_1 chained_from_last=true has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_chain account_id=120 turn=2 conn_id=oa_ws_120_1 previous_response_id=resp_turn_prev_once_1 previous_response_id_kind=response_id last_turn_response_id=resp_turn_prev_once_1 chained_from_last=true preferred_conn_id=oa_ws_120_1 header_session_id=- header_conversation_id=- has_turn_state=false turn_state_len=0 has_prompt_cache_key=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=120 turn=2 conn_id=oa_ws_120_1 payload_bytes=167\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recoverable account_id=120 turn=2 conn_id=oa_ws_120_1 idx=1 reason=previous_response_not_found code=previous_response_not_found type=invalid_request_err message=first missing previous_response_id=resp_turn_prev_once_1 previous_response_id_kind=response_id response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_prev_response_recovery account_id=120 turn=2 conn_id=oa_ws_120_1 action=drop_previous_response_id retry=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=120 conn_id=oa_ws_120_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=120 turn=2 conn_id=oa_ws_120_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5829853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.582Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=120 turn=2 conn_id=oa_ws_120_2 payload_bytes=70\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5834892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.583Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=120 turn=2 conn_id=oa_ws_120_2 response_id=resp_turn_prev_once_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5834892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.583Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=120 conn_id=oa_ws_120_2 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5834892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.583Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=120 conn_id=oa_ws_120_2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_PreviousResponseNotFoundRecoveryRemovesDuplicatePrevID","Elapsed":0} {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID"} {"Time":"2026-09-12T11:38:53.5840163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_RejectsMessageIDAsPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream"} {"Time":"2026-09-12T11:38:53.5854715+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":115,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"flex\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=115 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=115 turn=1 conn_id=oa_ws_115_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.5867047+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.586Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=115 turn=1 conn_id=oa_ws_115_1 payload_bytes=81\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_disconnected_drain account_id=115 turn=1 conn_id=oa_ws_115_1 close_status=- close_reason=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=115 turn=1 conn_id=oa_ws_115_1 response_id=resp_ingress_disconnect duration_ms=250 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=115 conn_id=oa_ws_115_1 close_status=- close_reason=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=115 conn_id=oa_ws_115_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream (0.25s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ClientDisconnectStillDrainsUpstream","Elapsed":0.25} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn"} {"Time":"2026-09-12T11:38:53.8370572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8376886+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":119,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.837Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=119 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=119 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=119 turn=1 conn_id=oa_ws_119_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=119 turn=1 conn_id=oa_ws_119_1 payload_bytes=184\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_invalid_encrypted_lineage_mark account_id=119 turn=1 digests=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_error_event account_id=119 turn=1 conn_id=oa_ws_119_1 idx=1 fallback_reason=invalid_encrypted_content err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified previous_response_id=- previous_response_id_kind=empty response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResponsesWebSocketFromClient.func10\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1113\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResp"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"onsesWebSocketFromClient\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1785\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn.func1\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress_session_test.go:4673\\nnet/http.HandlerFunc.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2338\\nnet/http.serverHandler.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:3413\\nnet/http.(*conn).serve\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2137\"}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=119 turn=1 conn_id=oa_ws_119_1 response_id=resp_enc_lineage_1 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=err last_event=response.fail first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_invalid_encrypted_lineage_strip account_id=119 turn=2 stripped_items=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=119 turn=2 conn_id=oa_ws_119_1 payload_bytes=186\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_completed account_id=119 turn=2 conn_id=oa_ws_119_1 response_id=resp_enc_lineage_2 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_client_closed account_id=119 conn_id=oa_ws_119_1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=119 conn_id=oa_ws_119_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_InvalidEncryptedContentLineageStripsNextTurn","Elapsed":0} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"=== RUN TestIsOpenAIWSClientDisconnectError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"=== RUN TestIsOpenAIWSIngressPreviousResponseNotFound\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"=== PAUSE TestIsOpenAIWSIngressPreviousResponseNotFound\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"} {"Time":"2026-09-12T11:38:53.8381978+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"=== RUN TestOpenAIWSIngressPreviousResponseRecoveryEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"=== PAUSE TestOpenAIWSIngressPreviousResponseRecoveryEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_image_generation_for_spark","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/strips_namespace_tools_for_spark","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/keeps_image_generation_for_non_spark","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Output":"=== RUN TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload/noop_when_no_image_tool","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Output":"--- PASS: TestStripCodexSparkImageGenerationToolFromRawPayload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripCodexSparkImageGenerationToolFromRawPayload","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/flat_image_tool","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/namespace_and_Responses_Lite_tools","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged","Output":"=== RUN TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload/non-image_namespace_is_unchanged","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Output":"--- PASS: TestStripOpenAIImageGenerationToolsFromRawPayload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIImageGenerationToolsFromRawPayload","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"=== RUN TestNormalizeOpenAIWSJSONForCompare\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"=== PAUSE TestNormalizeOpenAIWSJSONForCompare\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"=== RUN TestNormalizeOpenAIWSJSONForCompareOrRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"=== PAUSE TestNormalizeOpenAIWSJSONForCompareOrRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"=== RUN TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"=== PAUSE TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"=== PAUSE TestOpenAIWSExtractNormalizedInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"=== PAUSE TestBuildOpenAIWSReplayInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"=== RUN TestSetOpenAIWSPayloadInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"=== PAUSE TestSetOpenAIWSPayloadInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"=== RUN TestCombineOpenAIWSReplayItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"=== PAUSE TestCombineOpenAIWSReplayItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"=== PAUSE TestOpenAIWSReplaySequenceSharesBodies\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Output":"=== RUN TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Output":"--- PASS: TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersPrefersCodexHyphenHeader","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Output":"=== RUN TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Output":"--- PASS: TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSSessionHeadersFallsBackToLegacyHeader","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Output":"=== RUN TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Output":"--- PASS: TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_KeepPromptCacheKey","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Output":"=== RUN TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Output":"--- PASS: TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAIWSRetryPayloadStrategy_AttemptSixKeepsSemanticFields","Elapsed":0} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8387078+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=9 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.838Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=9 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=9 account_type=apikey ws_host=127.0.0.1:62165 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=9 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=143 payload_key_sizes=input:34,type:15,previous_response_id:11,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":9,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=9 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=9 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_9_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=9 account_type=apikey conn_id=oa_ws_9_1 previous_response_id=resp_prev_1 previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=9 conn_id=oa_ws_9_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=9 conn_id=oa_ws_9_1 stream=false payload_bytes=143 previous_response_id=resp_prev_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9 conn_id=oa_ws_9_1 idx=1 type=response.created bytes=77 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=9 conn_id=oa_ws_9_1 idx=2 type=response.completed bytes=168 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=9 conn_id=oa_ws_9_1 response_id=resp_new_1 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8392203+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=9 request_id=resp_new_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_SuccessAndBindSticky","Elapsed":0} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=10 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=10 account_type=apikey model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=10 account_type=apikey ws_host=127.0.0.1:62167 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=10 attempt=1 event=response.create payload_keys=input,model,stream,tools,type payload_bytes=144 payload_key_sizes=input:34,tools:28,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":10,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=10 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8397272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=10 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_10_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.839Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=10 conn_id=oa_ws_10_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=10 conn_id=oa_ws_10_1 stream=false payload_bytes=144 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=10 conn_id=oa_ws_10_1 idx=1 type=response.completed bytes=143 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=10 conn_id=oa_ws_10_1 response_id=resp_patched_ws_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=10 request_id=resp_patched_ws_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_UsesPatchedBodyAfterValidationDecode","Elapsed":0} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=10 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.4 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI] /responses image_generation request inbound_model=gpt-5.4 mapped_model=gpt-5.4 account_type=apikey\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=10 account_type=apikey model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=10 account_type=apikey ws_host=127.0.0.1:62169 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=10 attempt=1 event=response.create payload_keys=input,model,stream,tool_choice,tools,type payload_bytes=195 payload_key_sizes=tools:63,tool_choice:25,type:15,model:7,input:4,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":10,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8402359+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=10 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=10 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_10_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=10 conn_id=oa_ws_10_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=10 conn_id=oa_ws_10_1 stream=false payload_bytes=195 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=10 conn_id=oa_ws_10_1 idx=1 type=response.output_item.done bytes=136 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=10 conn_id=oa_ws_10_1 idx=2 type=response.completed bytes=232 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=10 conn_id=oa_ws_10_1 response_id=resp_ws_image_1 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.output_item.done last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=10 request_id=resp_ws_image_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ImageGenerationCountsOutputs","Elapsed":0} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"=== RUN TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":0,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Output":"--- PASS: TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersPreservesCodexIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Output":"=== RUN TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1300,\"final_model\":\"\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Output":"--- PASS: TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_BuildOpenAIWSHeadersDeviceModePreservesNamespacedClientSessionIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Output":"=== RUN TestLogOpenAIWSBindResponseAccountWarn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai.ws_bind_response_account_failed\",\"service\":\"sub2api\",\"env\":\"test\",\"group_id\":1,\"account_id\":2,\"response_id\":\"resp_err\",\"error\":\"bind failed\"}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Output":"--- PASS: TestLogOpenAIWSBindResponseAccountWarn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestLogOpenAIWSBindResponseAccountWarn","Elapsed":0} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=1301 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=custom-original-model stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI] Model mapping applied: custom-original-model -\u003e gpt-5.1 (account: openai-rewrite, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=1301 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1301 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=1301 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1301,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1301 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8407455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=1301 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_1301_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.840Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=1301 conn_id=oa_ws_1301_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=1301 conn_id=oa_ws_1301_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=1301 conn_id=oa_ws_1301_1 idx=1 type=response.completed bytes=406 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 1)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'file_path' to 'filePath' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'old_string' to 'oldString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'new_string' to 'newString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Corrected tool call: apply_patch -\u003e edit (total: 2)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'file_path' to 'filePath' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'old_string' to 'oldString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[CodexToolCorrector] Renamed 'new_string' to 'newString' in edit tool\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_tool_corrector\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=1301 conn_id=oa_ws_1301_1 response_id=resp_model_tool_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=1301 request_id=resp_model_tool_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_RewriteModelAndToolCallsOnCompletedEvent","Elapsed":0} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=1302 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=1302 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1302 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=1302 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1302,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1302 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=1302 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_1302_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=1302 conn_id=oa_ws_1302_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=1302 conn_id=oa_ws_1302_1 stream=false payload_bytes=75 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=1302 conn_id=oa_ws_1302_1 idx=1 type=response.fail bytes=137 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:53.841Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1302,\"status_code\":500}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:53.841Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1302,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=1302 conn_id=oa_ws_1302_1 response_id=resp_fail_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.fail last_event=response.fail first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=1302 request_id=resp_failed_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseFailedIsNotSchedulingSuccess","Elapsed":0} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Output":"=== RUN TestOpenAIWSPayloadString_OnlyAcceptsStringValues\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Output":"--- PASS: TestOpenAIWSPayloadString_OnlyAcceptsStringValues (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadString_OnlyAcceptsStringValues","Elapsed":0} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=19 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=19 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8412545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=19 account_type=apikey ws_host=127.0.0.1:62171 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=19 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=147 payload_key_sizes=input:34,previous_response_id:15,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=19 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=19 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_19_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=19 account_type=apikey conn_id=oa_ws_19_1 previous_response_id=resp_prev_reuse previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=19 conn_id=oa_ws_19_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=19 conn_id=oa_ws_19_1 stream=false payload_bytes=147 previous_response_id=resp_prev_reuse\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=1 type=response.created bytes=79 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=2 type=response.completed bytes=126 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=19 conn_id=oa_ws_19_1 response_id=resp_reuse_1 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=19 request_id=resp_reuse_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=19 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=19 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=19 account_type=apikey ws_host=127.0.0.1:62171 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=19 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=147 payload_key_sizes=input:34,previous_response_id:15,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8417648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.841Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=19 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=19 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_19_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=19 account_type=apikey conn_id=oa_ws_19_1 previous_response_id=resp_prev_reuse previous_response_id_kind=response_id preferred_conn_id=- conn_reused=true store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=19 conn_id=oa_ws_19_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=19 conn_id=oa_ws_19_1 stream=false payload_bytes=147 previous_response_id=resp_prev_reuse\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=1 type=response.created bytes=79 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=19 conn_id=oa_ws_19_1 idx=2 type=response.completed bytes=126 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=19 conn_id=oa_ws_19_1 response_id=resp_reuse_2 stream=false duration_ms=0 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=19 request_id=resp_reuse_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_PoolReuseNotOneToOne","Elapsed":0} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=29 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8422725+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=29 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=29 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=29 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21733 payload_key_sizes=instructions:21346,input:57,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":29,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=29 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=3c8f98fdfdc1... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=bee569cb16ab7b77 header_conversation_id=38c3c29f27199cd3 session_id_source=header_session_id conversation_id_source=header_conversation_id has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=true proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=29 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_29_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=29 conn_id=oa_ws_29_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=29 conn_id=oa_ws_29_1 stream=false payload_bytes=21733 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=29 conn_id=oa_ws_29_1 idx=1 type=response.completed bytes=125 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=29 conn_id=oa_ws_29_1 response_id=resp_oauth_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=29 request_id=resp_oauth_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthStoreFalseByDefault","Elapsed":0} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8427844+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.842Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5662 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.6-sol stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5662 account_type=oauth model=gpt-5.6-sol stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5662 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5662 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=296 payload_key_sizes=input:154,instructions:18,type:15,model:11,store:1,stream:1 input_summary=items=2,text_chars=0,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5662,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5662 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5662 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_5662_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5662 conn_id=oa_ws_5662_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5662 conn_id=oa_ws_5662_1 stream=false payload_bytes=296 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5662 conn_id=oa_ws_5662_1 idx=1 type=response.completed bytes=140 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5662 conn_id=oa_ws_5662_1 response_id=resp_oauth_tool_history stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5662 request_id=resp_oauth_tool_history stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthSanitizesInvalidNativeToolItemID","Elapsed":0} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8432965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_desktop_ua","Elapsed":0} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8438079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.843Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/mismatched_originator","Elapsed":0} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8443163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/tui_identity","Elapsed":0} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=129 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8448402+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.844Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=129 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=129 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=129 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":129,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=129 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=129 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_129_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=129 conn_id=oa_ws_129_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=129 conn_id=oa_ws_129_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=129 conn_id=oa_ws_129_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=129 conn_id=oa_ws_129_1 response_id=resp_oauth_originator stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=129 request_id=resp_oauth_originator stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility/official_originator_without_ua","Elapsed":0} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthOriginatorCompatibility","Elapsed":0} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=130 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8453475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth-custom-ua, type: oauth, isCodexCLI: false)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=130 account_type=oauth model=gpt-5.4 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=130 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=130 attempt=1 event=response.create payload_keys=input,instructions,model,store,stream,type payload_bytes=21707 payload_key_sizes=instructions:21346,input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":130,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=130 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Mac OS X 15.1.0; arm64) iTerm.app header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=130 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_130_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=130 conn_id=oa_ws_130_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=130 conn_id=oa_ws_130_1 stream=false payload_bytes=21707 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=130 conn_id=oa_ws_130_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=130 conn_id=oa_ws_130_1 response_id=resp_oauth_account_ua stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=130 request_id=resp_oauth_account_ua stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_OAuthHonorsAccountUserAgent","Elapsed":0} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=31 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8458594+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.845Z\",\"msg\":\"[OpenAI] Upstream model resolved: gpt-5.1 -\u003e gpt-5.4 (account: openai-oauth, type: oauth, isCodexCLI: true)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=31 account_type=oauth model=gpt-5.4 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=31 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=31 attempt=1 event=response.create payload_keys=input,instructions,model,prompt_cache_key,store,stream,type payload_bytes=21736 payload_key_sizes=instructions:21346,input:31,type:15,prompt_cache_key:10,model:7,store:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=true has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":31,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=31 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=fb91e8ac9180... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=6805120a6afa07a7 header_conversation_id=- session_id_source=prompt_cache_key conversation_id_source=none has_prompt_cache_key=true has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=31 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_31_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8463848+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=31 conn_id=oa_ws_31_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=31 conn_id=oa_ws_31_1 stream=true payload_bytes=21736 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=31 conn_id=oa_ws_31_1 idx=1 type=response.completed bytes=134 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=31 conn_id=oa_ws_31_1 response_id=resp_prompt_cache_key stream=true duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=31 request_id=resp_prompt_cache_key stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_HeaderSessionFallbackFromPromptCacheKey","Elapsed":0} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=4405 account_type=oauth transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.2 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=4405 account_type=oauth model=gpt-5.2 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=4405 account_type=oauth ws_host=chatgpt.com ws_path=/backend-api/codex/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=4405 attempt=1 event=response.create payload_keys=client_metadata,input,instructions,model,prompt_cache_key,store,stream,type payload_bytes=22894 payload_key_sizes=instructions:21671,client_metadata:613,prompt_cache_key:36,input:31,type:15,model:7 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=true has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":4405,\"final_model\":\"gpt-5.2\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.846Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=4405 account_type=oauth transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6d83ac66dd39... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=167 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex-tui/0.146.0 (Ubuntu 22.4.0; x86_64) xterm-256color header_openai_beta=responses_websockets=2026-02-06 header_originator=codex-tui header_accept_language=- header_session_id=4065c8ec-c2ce-48bd-9198-53c4c5e30d6e header_conversation_id=- session_id_source=header_session-id conversation_id_source=none has_prompt_cache_key=true has_chatgpt_account_id=true has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=4405 account_type=oauth transport=responses_websockets_v2 conn_id=oa_ws_4405_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=4405 conn_id=oa_ws_4405_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=4405 conn_id=oa_ws_4405_1 stream=true payload_bytes=22894 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=4405 conn_id=oa_ws_4405_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=4405 conn_id=oa_ws_4405_1 response_id=resp_ws_fingerprint stream=true duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=4405 request_id=resp_ws_fingerprint stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Elapsed":0} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=32 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=32 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=32 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=32 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=103 payload_key_sizes=input:31,type:15,model:7,stream:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":32,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=32 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=32 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_32_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=32 conn_id=oa_ws_32_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=32 conn_id=oa_ws_32_1 stream=false payload_bytes=103 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=32 conn_id=oa_ws_32_1 idx=1 type=response.done bytes=242 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=32 conn_id=oa_ws_32_1 response_id=resp_done_usage stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.done last_event=response.done first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=32 request_id=resp_done_usage stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_ResponseDoneUsageParsed","Elapsed":0} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv1_Unsupported\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv1_Unsupported (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv1_Unsupported","Elapsed":0} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect"} {"Time":"2026-09-12T11:38:53.8474648+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=49 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=49 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=49 account_type=apikey ws_host=127.0.0.1:62173 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=49 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=164 payload_key_sizes=client_metadata:37,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":49,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=49 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6bb9e32bb454... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=11 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_turn_state header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=49 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_49_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=49 conn_id=oa_ws_49_1 has_turn_state=true turn_state_len=16\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8479956+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.847Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=49 conn_id=oa_ws_49_1 stream=false payload_bytes=164 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=49 conn_id=oa_ws_49_1 idx=1 type=response.completed bytes=125 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=49 conn_id=oa_ws_49_1 response_id=resp_turn_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=49 request_id=resp_turn_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=49 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=49 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=49 account_type=apikey ws_host=127.0.0.1:62173 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=49 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=164 payload_key_sizes=client_metadata:37,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":49,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=49 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=6bb9e32bb454... has_turn_state=true turn_state_len=16 has_turn_metadata=true turn_metadata_len=11 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_turn_state header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=49 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_49_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=49 conn_id=oa_ws_49_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8485043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.848Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=49 conn_id=oa_ws_49_2 stream=false payload_bytes=164 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=49 conn_id=oa_ws_49_2 idx=1 type=response.completed bytes=125 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=49 conn_id=oa_ws_49_2 response_id=resp_turn_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=49 request_id=resp_turn_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnStateAndMetadataReplayOnReconnect","Elapsed":0} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=59 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=59 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=59 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=59 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":59,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=59 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=5d7dff2e0b90... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session-prewarm header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=59 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_59_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=59 conn_id=oa_ws_59_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_start account_id=59 conn_id=oa_ws_59_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_write_sent account_id=59 conn_id=oa_ws_59_1 payload_bytes=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_event account_id=59 conn_id=oa_ws_59_1 idx=1 type=response.completed bytes=127\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_done account_id=59 conn_id=oa_ws_59_1 response_id=resp_prewarm_1 events=1 terminal_events=1 duration_ms=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=59 conn_id=oa_ws_59_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=59 conn_id=oa_ws_59_1 idx=1 type=response.completed bytes=124 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=59 conn_id=oa_ws_59_1 response_id=resp_main_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=59 request_id=resp_main_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_GeneratePrewarm","Elapsed":0} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"=== RUN TestOpenAIGatewayService_PrewarmReadHonorsParentContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_start account_id=601 conn_id=prewarm_ctx_conn\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8490471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.849Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_write_sent account_id=601 conn_id=prewarm_ctx_conn payload_bytes=61\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] prewarm_read_fail account_id=601 conn_id=prewarm_ctx_conn close_status=- close_reason=- cause=context deadline exceeded events=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Output":"--- PASS: TestOpenAIGatewayService_PrewarmReadHonorsParentContext (0.04s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_PrewarmReadHonorsParentContext","Elapsed":0.04} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=69 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=69 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=69 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=69 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=172 payload_key_sizes=client_metadata:45,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":69,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=69 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=2bbed1f6a0f2... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=19 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session-metadata-reuse header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=69 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_69_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=69 conn_id=oa_ws_69_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=69 conn_id=oa_ws_69_1 stream=false payload_bytes=172 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=69 conn_id=oa_ws_69_1 idx=1 type=response.completed bytes=124 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=69 conn_id=oa_ws_69_1 response_id=resp_meta_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=69 request_id=resp_meta_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=69 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=69 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=69 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=69 attempt=1 event=response.create payload_keys=client_metadata,input,model,stream,type payload_bytes=172 payload_key_sizes=client_metadata:45,input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":69,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=69 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=2bbed1f6a0f2... has_turn_state=false turn_state_len=0 has_turn_metadata=true turn_metadata_len=19 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session-metadata-reuse header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=69 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_69_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=69 conn_id=oa_ws_69_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=69 conn_id=oa_ws_69_1 stream=false payload_bytes=172 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=69 conn_id=oa_ws_69_1 idx=1 type=response.completed bytes=124 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=69 conn_id=oa_ws_69_1 response_id=resp_meta_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.889Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=69 request_id=resp_meta_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_TurnMetadataInPayloadOnConnReuse","Elapsed":0} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation"} {"Time":"2026-09-12T11:38:53.8894842+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=79 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=79 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=79 account_type=apikey ws_host=127.0.0.1:62176 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=79 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":79,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8901968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=79 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=22fb4eb406f4... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=strict retry_last_reason=- force_new_conn=true header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_a header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=79 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_79_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=79 conn_id=oa_ws_79_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=79 conn_id=oa_ws_79_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=79 conn_id=oa_ws_79_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=79 conn_id=oa_ws_79_1 response_id=resp_store_false_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=79 request_id=resp_store_false_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=79 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=79 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=79 account_type=apikey ws_host=127.0.0.1:62176 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=79 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":79,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=79 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=oa_ws_79_1 has_previous_response_id=false session_hash=22fb4eb406f4... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=strict retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_a header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=79 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_79_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=79 conn_id=oa_ws_79_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8907133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=79 conn_id=oa_ws_79_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.890Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=79 conn_id=oa_ws_79_1 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=79 conn_id=oa_ws_79_1 response_id=resp_store_false_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=79 request_id=resp_store_false_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=79 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=79 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=79 account_type=apikey ws_host=127.0.0.1:62176 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=79 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":79,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=79 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=837c00343a21... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=strict retry_last_reason=- force_new_conn=true header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_b header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=79 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_79_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=79 conn_id=oa_ws_79_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8912338+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=79 conn_id=oa_ws_79_2 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=79 conn_id=oa_ws_79_2 idx=1 type=response.completed bytes=132 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=79 conn_id=oa_ws_79_2 response_id=resp_store_false_3 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=79 request_id=resp_store_false_3 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseSessionConnIsolation","Elapsed":0} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=80 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=80 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=80 account_type=apikey ws_host=127.0.0.1:62179 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=80 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":80,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8917519+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.891Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=80 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=bfa2432c8ad9... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_reuse_a header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=80 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_80_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=80 conn_id=oa_ws_80_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=80 conn_id=oa_ws_80_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=80 conn_id=oa_ws_80_1 idx=1 type=response.completed bytes=138 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=80 conn_id=oa_ws_80_1 response_id=resp_store_false_reuse_1 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=80 request_id=resp_store_false_reuse_1 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=80 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=80 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=80 account_type=apikey ws_host=127.0.0.1:62179 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=80 attempt=1 event=response.create payload_keys=input,model,store,stream,type payload_bytes=120 payload_key_sizes=input:34,type:15,model:7,store:1,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":80,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=80 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=a7354a66edea... has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=true store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=session_store_false_reuse_b header_conversation_id=- session_id_source=header_session_id conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=true has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=80 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_80_1 conn_reused=true conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=80 conn_id=oa_ws_80_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=80 conn_id=oa_ws_80_1 stream=false payload_bytes=120 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=80 conn_id=oa_ws_80_1 idx=1 type=response.completed bytes=138 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=80 conn_id=oa_ws_80_1 response_id=resp_store_false_reuse_2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=80 request_id=resp_store_false_reuse_2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StoreFalseDisableForceNewConnAllowsReuse","Elapsed":0} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:53.8922622+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=81 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=81 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=81 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=81 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":81,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=81 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=codex_cli_rs/0.98.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=81 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_81_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=81 conn_id=oa_ws_81_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:53.8928092+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:53.892Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=81 conn_id=oa_ws_81_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:54.5932902+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:54.593Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=81 conn_id=oa_ws_81_1 idx=1 type=response.created bytes=81 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.293Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=81 conn_id=oa_ws_81_1 idx=2 type=response.completed bytes=128 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.293Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=81 conn_id=oa_ws_81_1 response_id=resp_timeout_ok stream=false duration_ms=1401 events=2 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.created last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.293Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=81 request_id=resp_timeout_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead (1.40s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ReadTimeoutAppliesPerRead","Elapsed":1.4} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/empty","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/whitespace_trimmed_empty","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.created","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.in_progress","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.added","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/response.output_item.done","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.completed_padded","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/terminal_response.done_padded","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_text","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_audio_transcript","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/delta_function_call_arguments","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_done","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_text_annotation_added","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/output_audio_done","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/reasoning_summary_delta","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unrelated_event_error","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match","Output":"=== RUN TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded/unknown_event_without_match","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Output":"--- PASS: TestIsOpenAIWSTokenEvent_TerminalEventsExcluded (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_TerminalEventsExcluded","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Output":"=== RUN TestOpenAIWSCyberPolicyMark_ResponseFailed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Output":"--- PASS: TestOpenAIWSCyberPolicyMark_ResponseFailed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_ResponseFailed","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Output":"=== RUN TestOpenAIWSCyberPolicyMark_NonCyberPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Output":"--- PASS: TestOpenAIWSCyberPolicyMark_NonCyberPayload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSCyberPolicyMark_NonCyberPayload","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/nil_legacy_result","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/non_websocket_zero_value","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/websocket_legacy_empty_terminal","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/completed","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/done","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/failed","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/incomplete","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled","Output":"=== RUN TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents/cancelled","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Output":"--- PASS: TestOpenAIForwardResultSucceededForScheduling_TerminalEvents (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIForwardResultSucceededForScheduling_TerminalEvents","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"=== RUN TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"status_code\":500}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"status_code\":500}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5201,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Output":"--- PASS: TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSTerminalEvent_ResponseFailedRecordsModelTransient","Elapsed":0} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"=== RUN TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"status_code\":500}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"status_code\":500}\n"} {"Time":"2026-09-12T11:38:55.293745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5203,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Output":"--- PASS: TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorEvent_ServerErrorRecordsModelTransient","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Output":"=== RUN TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Output":"--- PASS: TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPayloadTransientStatus_Explicit529IsNotModelTransient","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"=== RUN TestOpenAIWSDial5xxRecordsModelTransient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"status_code\":502}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.293Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"status_code\":502}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.294Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":5202,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Output":"--- PASS: TestOpenAIWSDial5xxRecordsModelTransient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDial5xxRecordsModelTransient","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.completed","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.done","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.failed","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.incomplete","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.cancelled","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled","Output":"=== RUN TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal/response.canceled","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Output":"--- PASS: TestIsOpenAIWSTokenEvent_DisjointWithTerminal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSTokenEvent_DisjointWithTerminal","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Output":"=== RUN TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"=== RUN TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5882 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5882 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5882 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5882 attempt=1 event=response.create payload_keys=input,model,service_tier,stream,type payload_bytes=129 payload_key_sizes=input:31,type:15,service_tier:8,model:7,stream:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5882,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5882 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5882 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5882_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5882 conn_id=oa_ws_5882_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5882 conn_id=oa_ws_5882_1 stream=false payload_bytes=129 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5882 conn_id=oa_ws_5882_1 idx=1 type=response.completed bytes=171 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5882 conn_id=oa_ws_5882_1 response_id=resp_tier_v2 stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5882 request_id=resp_tier_v2 stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Output":"--- PASS: TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/priority_nonstream","Elapsed":0} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"=== RUN TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5882 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5882 account_type=apikey model=gpt-5.5 stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5882 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5882 attempt=1 event=response.create payload_keys=input,model,service_tier,stream,type payload_bytes=128 payload_key_sizes=input:31,type:15,service_tier:8,model:7,stream:1 input_summary=items=1,text_chars=2,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5882,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:55.2943351+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5882 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5882 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5882_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5882 conn_id=oa_ws_5882_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5882 conn_id=oa_ws_5882_1 stream=true payload_bytes=128 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5882 conn_id=oa_ws_5882_1 idx=1 type=response.completed bytes=171 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5882 conn_id=oa_ws_5882_1 response_id=resp_tier_v2 stream=true duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=true client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5882 request_id=resp_tier_v2 stream=true has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Output":"--- PASS: TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate/fast_stream","Elapsed":0} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Output":"--- PASS: TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_KeepsOutboundAndObservedServiceTiersSeparate","Elapsed":0} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Output":"=== RUN TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"=== RUN TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5883 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5883 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5883 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5883 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5883,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5883 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5883 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5883_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5883 conn_id=oa_ws_5883_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5883 conn_id=oa_ws_5883_1 stream=false payload_bytes=75 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5883 conn_id=oa_ws_5883_1 idx=1 type=err bytes=167 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=5883 conn_id=oa_ws_5883_1 idx=1 fallback_reason=upstream_rate_limited can_fallback=false err_code=cyber_policy err_type=rate_limit_err err_message=rate limit exceeded by cyber policy\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestForwardOpenAIWSV2_Mar"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"ksCyberPolicyForFailureEventShapes.func1\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2_test.go:152\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Output":"--- PASS: TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/error_before_return","Elapsed":0} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"=== RUN TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=5883 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=5883 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=5883 account_type=apikey ws_host=api.openai.com ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=5883 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":5883,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=5883 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=- header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=5883 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_5883_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=5883 conn_id=oa_ws_5883_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=5883 conn_id=oa_ws_5883_1 stream=false payload_bytes=75 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2948603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=5883 conn_id=oa_ws_5883_1 idx=1 type=response.fail bytes=188 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=5883 conn_id=oa_ws_5883_1 response_id=resp_cyber stream=false duration_ms=0 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.fail last_event=response.fail first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.294Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=5883 request_id=resp_cyber stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Output":"--- PASS: TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes/response_failed_terminal","Elapsed":0} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Output":"--- PASS: TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardOpenAIWSV2_MarksCyberPolicyForFailureEventShapes","Elapsed":0} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash"} {"Time":"2026-09-12T11:38:55.2953686+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"=== RUN TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=1 account_type=oauth payload_bytes=140 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=1 account_type=oauth payload_bytes=137 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2958887+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.295Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=1 response_id=resp_beta_1 payload_bytes=137 duration_ms=0 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=1 response_id=resp_alpha_1 payload_bytes=140 duration_ms=0 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=1 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=2 response_id=resp_alpha_2 payload_bytes=297 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=1 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=1 turn=2 response_id=resp_beta_2 payload_bytes=291 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2964123+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=1 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Output":"--- PASS: TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeSessionIsolationAcrossSameSessionHash","Elapsed":0} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Output":"=== RUN TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Output":"--- PASS: TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSCurrentTurnRetryPayloadRejectsOrphanToolOutput","Elapsed":0} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurn429FailsOverBeforeClientWrite","Elapsed":0} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.296Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnLaterTurnDoesNotFailOverAfterDownstreamOutput","Elapsed":0} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount"} {"Time":"2026-09-12T11:38:55.2969234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"=== RUN TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=129 account_type=oauth payload_bytes=92 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=129 turn=1 response_id=resp_first payload_bytes=92 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=129 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":129,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=130 account_type=oauth payload_bytes=536 threshold_bytes=15728640 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":130,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.297436+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=130 turn=1 response_id=resp_second payload_bytes=536 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=130 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Output":"--- PASS: TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeLaterTurn429RetriesCurrentTurnOnReplacementAccount","Elapsed":0} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Output":"=== RUN TestResolveOpenAIWSClientFirstMessageTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Output":"--- PASS: TestResolveOpenAIWSClientFirstMessageTimeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveOpenAIWSClientFirstMessageTimeout","Elapsed":0} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Output":"=== RUN TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Output":"--- PASS: TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsWSFields","Elapsed":0} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Output":"=== RUN TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Output":"--- PASS: TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPrepareOpenAIWSHTTPBridgeBodyStripsNoneReasoningForCompatibleEndpoint","Elapsed":0} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5881,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5881 turn=1 response_id=resp_tier payload_bytes=97 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_KeepsOutboundAndObservedServiceTiersSeparate","Elapsed":0} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5882,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"priority\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5882 turn=1 response_id=resp_tier2 payload_bytes=93 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurn_NormalizesFastWithoutLosingObservedDefault","Elapsed":0} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2979465+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.297Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5659,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5659 turn=2 response_id=resp_tools payload_bytes=348 duration_ms=0 events=5 token_events=1 terminal_events=1 first_event=response.output_item.added last_event=response.completed first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyAdaptsClientTools","Elapsed":0} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":5764,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5764 turn=1 response_id=resp_tools payload_bytes=157 duration_ms=0 events=4 token_events=1 terminal_events=1 first_event=response.output_item.added last_event=response.done first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnAPIKeyRestoresClientToolsInResponseDone","Elapsed":0} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE"} {"Time":"2026-09-12T11:38:55.298466+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5765 turn=1 response_id=resp_spawn payload_bytes=472 duration_ms=0 events=4 token_events=0 terminal_events=1 first_event=response.output_item.added last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokPromotesDiscoveryAndRestoresNamespaceSSE","Elapsed":0} {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery"} {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2989782+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5766 turn=1 response_id=resp_first payload_bytes=117 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.298Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=5766 turn=2 response_id=resp_second payload_bytes=296 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnGrokInheritsToolSearchAndPromotesFollowupDiscovery","Elapsed":0} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools"} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"=== RUN TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9001 account_type=apikey payload_bytes=122 threshold_bytes=1 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2994881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9001,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9001 turn=1 response_id=resp_custom_first payload_bytes=122 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=9001 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9001,\"final_model\":\"gpt-5.6-sol\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9001 turn=2 response_id=resp_custom_second payload_bytes=302 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.299Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9001 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Output":"--- PASS: TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAPIKeyReusesClientToolMappingWhenFollowupOmitsTools","Elapsed":0} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay"} {"Time":"2026-09-12T11:38:55.2999967+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"=== RUN TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9002 account_type=oauth payload_bytes=62 threshold_bytes=1 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=1 response_id=resp_1 payload_bytes=62 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=9002 turn=2 input_items=2 previous_response_id_present=true has_tool_output=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=2 response_id=resp_2 payload_bytes=153 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3005064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.300Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=3 response_id=resp_3 payload_bytes=236 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9002,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9002 turn=4 response_id=resp_4 payload_bytes=236 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9002 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Output":"--- PASS: TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeFullCustomToolHistoryWithoutPreviousResponseIDDoesNotReplay","Elapsed":0} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall"} {"Time":"2026-09-12T11:38:55.3010162+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"=== RUN TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9003 account_type=oauth payload_bytes=62 threshold_bytes=1 has_session_hash=true store_disabled=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9003,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9003 turn=1 response_id=resp_1 payload_bytes=62 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=9003 turn=2 input_items=3 previous_response_id_present=false has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9003,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9003 turn=2 response_id=resp_2 payload_bytes=223 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3015271+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.301Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9003 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Output":"--- PASS: TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeObjectToolOutputWithoutPreviousResponseIDReplaysMatchingCall","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Output":"=== RUN TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Output":"--- PASS: TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeDecisionKeepsSmallFramesOnWS","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_without_previous_response_id_bridges","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/omitted_type_bridges_as_response_create","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/blank_type_bridges_as_response_create","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/exact_threshold_bridges","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/small_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/previous_response_id_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_type_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/duplicate_previous_response_id_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/null_type_bridges_as_response_create","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/non-string_type_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_response_cancel_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_other_event_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough","Output":"=== RUN TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision/oversized_malformed_JSON_stays_passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Output":"--- PASS: TestOpenAIWSPassthroughFirstMessageBridgeDecision (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughFirstMessageBridgeDecision","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/first_turn_fails_over_before_downstream_event","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":8,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety/later_turn_does_not_replay_completed_turns","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnTransportErrorFailoverSafety","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_401","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_429","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/first_turn_500","Elapsed":0} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay"} {"Time":"2026-09-12T11:38:55.3020385+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety/later_turn_500_does_not_replay","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnHTTPStatusFailoverSafety","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":91,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_rejected_field_retry account_id=91 turn=1 reason=truncation parameter rejection\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":91,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=91 turn=1 response_id=resp_retry payload_bytes=44 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRetriesRejectedFieldBeforeClientOutput","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_1","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":10,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety/turn_2","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnSSEErrorFailoverSafety","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_error_frame","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=11 turn=2 response_id=resp_shed payload_bytes=55 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.fail last_event=response.fail first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient/turn2_bare_response_failed","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRewritesCapacityShedCodeForClient","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":111,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.302Z\",\"logger\":\"slog\",\"msg\":\"account_disabled_auth_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":111,\"error\":\"OpenAI upstream account or workspace is unavailable\"}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.302Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=111 turn=2 response_id=resp_fail payload_bytes=55 duration_ms=0 events=3 token_events=1 terminal_events=1 first_event=response.output_text.delta last_event=response.fail first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorUsesAuthoritativeFailed","Elapsed":0} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes"} {"Time":"2026-09-12T11:38:55.3025471+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/http_error_body","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_error_event","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=112 turn=1 response_id=resp_cyber payload_bytes=55 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.fail last_event=response.fail first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes/sse_response_failed_event","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnMarksCyberPolicyForFailureShapes","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":112,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorEOFSynthesizesFailed","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":113,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=113 turn=2 response_id=resp_recovered payload_bytes=55 duration_ms=0 events=3 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnBareErrorFollowedByCompletedUsesCompleted","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":12,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnStagesMetadataBeforeCapacityFailover","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":13,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"gateway.failover_suppressed_after_semantic_output\",\"service\":\"sub2api\",\"env\":\"test\",\"path\":\"ws_http_bridge\",\"event_type\":\"response.failed\",\"upstream_request_id\":\"rid-ws-bridge-post-output\",\"account_id\":13,\"platform\":\"openai\"}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=13 turn=1 response_id=resp_partial payload_bytes=55 duration_ms=0 events=3 token_events=1 terminal_events=1 first_event=response.created last_event=response.fail first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnDoesNotReplayCapacityAfterSemanticOutput","Elapsed":0} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent"} {"Time":"2026-09-12T11:38:55.3030567+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/done_without_events_fails_over","Elapsed":0} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":11,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent/created_then_done_fails_over_before_semantic_output","Elapsed":0} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnRequiresTerminalEvent","Elapsed":0} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"=== RUN TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":7,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.3035647+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.303Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=7 turn=1 response_id=resp_bridge payload_bytes=198 duration_ms=0 events=3 token_events=1 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=0 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Output":"--- PASS: TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeRelaysSSEFramesAsWebSocketMessages","Elapsed":0} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.304Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=72 turn=1 response_id=resp_grok_default payload_bytes=69 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnForGrokDefaultsEmptyModelTo45","Elapsed":0} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"=== RUN TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.304Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=73 turn=1 response_id=resp_grok_codex_lite payload_bytes=484 duration_ms=0 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Output":"--- PASS: TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestProxyOpenAIWSHTTPBridgeTurnPromotesCodexAdditionalToolsForMixedCache","Elapsed":0} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB"} {"Time":"2026-09-12T11:38:55.3040721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"=== RUN TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.5761348+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.576Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=9 account_type=apikey payload_bytes=17825875 threshold_bytes=17826304 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.7369364+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.736Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":9,\"final_model\":\"gpt-5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.7679847+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.767Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=9 turn=1 response_id=resp_large_bridge payload_bytes=17825875 duration_ms=59 events=2 token_events=0 terminal_events=1 first_event=response.created last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8097144+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.809Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=9 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Output":"--- PASS: TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB (0.53s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeAcceptsFirstFrameAboveLegacy16MiB","Elapsed":0.53} {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID"} {"Time":"2026-09-12T11:38:55.8317321+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"=== RUN TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=19 account_type=apikey payload_bytes=74 threshold_bytes=1 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=19 turn=1 response_id=resp_bridge_first payload_bytes=74 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_replay_input account_id=19 turn=2 input_items=3 previous_response_id_present=true has_tool_output=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":19,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=19 turn=2 response_id=resp_bridge_second payload_bytes=294 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_client_closed account_id=19 close_status=1000(StatusNormalClosure) close_reason=done\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Output":"--- PASS: TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridgeKeepsContinuationFramesOnHTTPWithoutPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession"} {"Time":"2026-09-12T11:38:55.8322337+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"=== RUN TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:55.8327659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_start account_id=20 account_type=apikey payload_bytes=75 threshold_bytes=1 has_session_hash=true store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:55.8327659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http_passthrough\",\"account_id\":20,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:55.8327659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:55.832Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_http_bridge_turn_completed account_id=20 turn=1 response_id=resp_bridge_idle payload_bytes=75 duration_ms=0 events=1 token_events=0 terminal_events=1 first_event=response.completed last_event=response.completed first_token_ms=-1 client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.833Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_inter_turn_idle_timeout account_id=20 timeout_seconds=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Output":"--- PASS: TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSHTTPBridge_IdleTimeoutClosesClientSession","Elapsed":1} {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation"} {"Time":"2026-09-12T11:38:56.8332305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"=== RUN TestMode1WSSActualHandshakeAndFramePreservation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.835Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"--- PASS: TestMode1WSSActualHandshakeAndFramePreservation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Elapsed":0} {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation"} {"Time":"2026-09-12T11:38:56.835232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"=== RUN TestMode1WSSTransportCacheIsolationAndProfileRotation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"--- PASS: TestMode1WSSTransportCacheIsolationAndProfileRotation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Elapsed":0} {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate"} {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate"} {"Time":"2026-09-12T11:38:56.83591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Elapsed":0.02} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Elapsed":0} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Elapsed":0} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Elapsed":0.02} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility"} {"Time":"2026-09-12T11:38:56.8520252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"=== RUN TestMode1WSConnectionPoolTransportCompatibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8535673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.853Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8546263+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.854Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8556947+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.855Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.856Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"--- PASS: TestMode1WSConnectionPoolTransportCompatibility (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Elapsed":0.01} {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated"} {"Time":"2026-09-12T11:38:56.8573194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"=== RUN TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8588886+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.858Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8599366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.859Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8631168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"--- PASS: TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Elapsed":0.01} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed"} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"=== RUN TestMode1WSRuntimeConcurrencyCapCannotBeBypassed\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"--- PASS: TestMode1WSRuntimeConcurrencyCapCannotBeBypassed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Elapsed":0} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS"} {"Time":"2026-09-12T11:38:56.8636316+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"=== RUN TestMode1WSPassthroughEntryReachesRealTLS\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=45 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=123\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=45 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":45,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:38:56.8641486+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.864Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":45,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:56.865Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=45 status_code=0 upstream_request_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_start direction=- msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8652079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8657194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:56.8657194+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:56.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \\\"done\\\"\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:57.8654034+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.865Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=45 request_id=- terminal_event=- duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"--- PASS: TestMode1WSPassthroughEntryReachesRealTLS (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Elapsed":1} {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial"} {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough"} {"Time":"2026-09-12T11:38:57.8659057+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8669693+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:38:57.866Z\",\"msg\":\"[OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=46 model=gpt-5.4 previous_response_id=- first_message_type=text first_message_bytes=122\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_ws_v2\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Elapsed":0} {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool"} {"Time":"2026-09-12T11:38:57.8674851+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Elapsed":0} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Elapsed":0} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy"} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http"} {"Time":"2026-09-12T11:38:57.8685341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/http\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8705892+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:57.870Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Elapsed":0} {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https"} {"Time":"2026-09-12T11:38:57.8711074+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/https\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.873667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:38:57.873Z\",\"logger\":\"slog\",\"msg\":\"tls_fingerprint_handshake_success\",\"service\":\"sub2api\",\"env\":\"test\",\"host\":\"127.0.0.1\",\"version\":772,\"cipher_suite\":4865,\"alpn\":\"http/1.1\"}\n"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/https (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Elapsed":0.01} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ResponseFailedNestedError","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/error","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark","Output":"=== RUN TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary/completed_does_not_mark","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Output":"--- PASS: TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMarkOpenAIWSClientVisibleFailure_ErrorAndSuccessBoundary","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Output":"=== RUN TestOpenAIWSConnPool_CleanupStaleAndTrimIdle\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Output":"--- PASS: TestOpenAIWSConnPool_CleanupStaleAndTrimIdle (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Output":"=== RUN TestOpenAIWSConnPool_NextConnIDFormat\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Output":"--- PASS: TestOpenAIWSConnPool_NextConnIDFormat (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Output":"=== RUN TestOpenAIWSConnPool_AcquireCleanupInterval\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Output":"--- PASS: TestOpenAIWSConnPool_AcquireCleanupInterval (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Output":"=== RUN TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Output":"--- PASS: TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSRoutingAffinityPrefersCanonicalAndSortsVariants","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Output":"=== RUN TestOpenAIWSConnLease_WriteJSONAndGuards\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Output":"--- PASS: TestOpenAIWSConnLease_WriteJSONAndGuards (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONAndGuards","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground","Output":"=== RUN TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground","Output":"--- PASS: TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_WriteJSONWithTimeout_NilParentContextUsesBackground","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountAdaptive\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountAdaptive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountMinIdleZero\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountMinIdleZero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Elapsed":0} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync"} {"Time":"2026-09-12T11:38:57.8742117+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsync\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsync (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Elapsed":0.02} {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown"} {"Time":"2026-09-12T11:38:57.8947276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown (0.61s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Elapsed":0.61} {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress"} {"Time":"2026-09-12T11:38:58.5065147+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress (0.16s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Elapsed":0.16} {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics"} {"Time":"2026-09-12T11:38:58.6672888+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Output":"=== RUN TestOpenAIWSConnPool_AcquireQueueWaitMetrics\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Output":"--- PASS: TestOpenAIWSConnPool_AcquireQueueWaitMetrics (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Elapsed":0.06} {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease"} {"Time":"2026-09-12T11:38:58.7276703+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Output":"=== RUN TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Output":"--- PASS: TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Elapsed":0.01} {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial"} {"Time":"2026-09-12T11:38:58.7334433+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Output":"=== RUN TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Output":"--- PASS: TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Elapsed":0.01} {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter"} {"Time":"2026-09-12T11:38:58.7439376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Output":"=== RUN TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Output":"--- PASS: TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Elapsed":0.05} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Output":"=== RUN TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Output":"--- PASS: TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Output":"=== RUN TestOpenAIWSConnPool_ForceNewConnSkipsReuse\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Output":"--- PASS: TestOpenAIWSConnPool_ForceNewConnSkipsReuse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Output":"=== RUN TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Output":"=== RUN TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Output":"=== RUN TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Output":"--- PASS: TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Output":"=== RUN TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Output":"--- PASS: TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Elapsed":0} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures"} {"Time":"2026-09-12T11:38:58.7941579+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Output":"=== RUN TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Elapsed":0} {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection"} {"Time":"2026-09-12T11:38:58.7947576+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Output":"=== RUN TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Output":"--- PASS: TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Elapsed":0.05} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Output":"=== RUN TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Elapsed":0} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Elapsed":0} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly"} {"Time":"2026-09-12T11:38:58.8451145+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Elapsed":0.06} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Output":"=== RUN TestOpenAIWSConnPool_CleanupSkipsPinnedConn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Output":"--- PASS: TestOpenAIWSConnPool_CleanupSkipsPinnedConn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Output":"=== RUN TestOpenAIWSConnPool_PinUnpinConnBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Output":"--- PASS: TestOpenAIWSConnPool_PinUnpinConnBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsByAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsByAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Output":"=== RUN TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Output":"--- PASS: TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Elapsed":0} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead"} {"Time":"2026-09-12T11:38:58.90518+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead","Output":"=== RUN TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead","Output":"--- PASS: TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead (0.10s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadMessageWithContextTimeout_PerRead","Elapsed":0.1} {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext"} {"Time":"2026-09-12T11:38:59.0059588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext","Output":"=== RUN TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext","Output":"--- PASS: TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_WriteJSONWithContextTimeout_RespectsParentContext","Elapsed":0.02} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout"} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Output":"=== RUN TestOpenAIWSConnLease_PingWithTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Output":"--- PASS: TestOpenAIWSConnLease_PingWithTimeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_PingWithTimeout","Elapsed":0} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently"} {"Time":"2026-09-12T11:38:59.0262941+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently","Output":"=== RUN TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently","Output":"--- PASS: TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently (0.12s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_ReadAndWriteCanProceedConcurrently","Elapsed":0.12} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Output":"=== RUN TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Output":"=== RUN TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Output":"=== RUN TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Output":"--- PASS: TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Output":"=== RUN TestOpenAIWSConnPool_BackgroundWorkerGuardBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundWorkerGuardBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Output":"=== RUN TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Output":"--- PASS: TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Output":"=== RUN TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Output":"--- PASS: TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Output":"=== RUN TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Output":"--- PASS: TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Output":"=== RUN TestOpenAIWSConnPool_Close\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Output":"--- PASS: TestOpenAIWSConnPool_Close (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Output":"=== RUN TestOpenAIWSDialError_ErrorAndUnwrap\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Output":"--- PASS: TestOpenAIWSDialError_ErrorAndUnwrap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSDialError_ErrorAndUnwrap","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Output":"=== RUN TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Output":"--- PASS: TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteHelpersAndConnStats","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Output":"=== RUN TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Output":"--- PASS: TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Elapsed":0} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel"} {"Time":"2026-09-12T11:38:59.1466654+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Output":"=== RUN TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Output":"--- PASS: TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel (0.03s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Elapsed":0.03} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections"} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Output":"=== RUN TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Output":"--- PASS: TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Elapsed":0} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit"} {"Time":"2026-09-12T11:38:59.1775072+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Output":"=== RUN TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Output":"--- PASS: TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Elapsed":0.01} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Output":"=== RUN TestOpenAIWSConnLease_BasicGetterBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Output":"--- PASS: TestOpenAIWSConnLease_BasicGetterBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_BasicGetterBranches","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Output":"=== RUN TestOpenAIWSConnPool_UtilityBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Output":"--- PASS: TestOpenAIWSConnPool_UtilityBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches","Output":"=== RUN TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches","Output":"--- PASS: TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_LeaseAndTimeHelpers_NilAndClosedBranches","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Output":"=== RUN TestOpenAIWSConnLease_ReadWriteNilConnBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Output":"--- PASS: TestOpenAIWSConnLease_ReadWriteNilConnBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReadWriteNilConnBranches","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Output":"=== RUN TestOpenAIWSConnLease_ReleasedLeaseGuards\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Output":"--- PASS: TestOpenAIWSConnLease_ReleasedLeaseGuards (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_ReleasedLeaseGuards","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction","Output":"=== RUN TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction","Output":"--- PASS: TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenAfterRelease_NoEviction","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Output":"=== RUN TestOpenAIWSConn_AdditionalGuardBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Output":"--- PASS: TestOpenAIWSConn_AdditionalGuardBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConn_AdditionalGuardBranches","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Output":"=== RUN TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Output":"--- PASS: TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Output":"=== RUN TestOpenAIWSConnLease_MarkBrokenEvictsConn\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Output":"--- PASS: TestOpenAIWSConnLease_MarkBrokenEvictsConn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnLease_MarkBrokenEvictsConn","Elapsed":0} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches"} {"Time":"2026-09-12T11:38:59.1879033+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches (1.07s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Elapsed":1.07} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Output":"=== RUN TestOpenAIWSConnPool_Acquire_ErrorBranches\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Output":"--- PASS: TestOpenAIWSConnPool_Acquire_ErrorBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Elapsed":0} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Output":"=== RUN TestOpenAIWSConnPool_DialConnNilConnection\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Output":"--- PASS: TestOpenAIWSConnPool_DialConnNilConnection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Elapsed":0} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Output":"=== RUN TestOpenAIWSConnPool_SnapshotTransportMetrics\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Output":"--- PASS: TestOpenAIWSConnPool_SnapshotTransportMetrics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Elapsed":0} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled"} {"Time":"2026-09-12T11:39:00.2548356+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"=== RUN TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=1 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=1 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=1 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=140 payload_key_sizes=input:34,type:15,previous_response_id:8,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:00.2553376+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.2558591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.2558591+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.255Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=1 max_retries=5 reason=dial_fail backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.3763652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.3763652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:00.3763652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.3768666+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.3768666+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.376Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=2 max_retries=5 reason=dial_fail backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:00.6171004+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:00.617Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=3 max_retries=5 reason=dial_fail backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:01.0977649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:01.097Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:01.0977649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:01.097Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:01.0977649+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:01.097Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:01.0984617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:01.098Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:01.0984617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:01.098Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=4 max_retries=5 reason=dial_fail backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:02.0589673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:02.058Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=1 retry=5 max_retries=5 reason=dial_fail backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=1 account_type=apikey ws_host=127.0.0.1:54933 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=1 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=1 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:54933 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9790721+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=1 attempts=6 max_retries=5 reason=dial_fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled (3.72s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_PreservePreviousResponseIDWhenWSEnabled","Elapsed":3.72} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.979Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":101,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressStaysHTTPWhenWSEnabled","Elapsed":0} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce"} {"Time":"2026-09-12T11:39:03.9796395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":102,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":102,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesInvalidEncryptedContentOnce","Elapsed":0} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":103,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[OpenAI] Retrying non-WSv2 request once after invalid_encrypted_content (account: openai-apikey-wrapped)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":103,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_HTTPIngressRetriesWrappedInvalidEncryptedContentOnce","Elapsed":0} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled"} {"Time":"2026-09-12T11:39:03.9801501+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Output":"=== RUN TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_APIKeyHTTPPreservesPreviousResponseIDWhenWSDisabled","Elapsed":0} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=12 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=12 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=12 account_type=apikey ws_host=127.0.0.1:56572 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=12 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=140 payload_key_sizes=input:34,type:15,previous_response_id:8,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":12,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:03.9807043+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.980Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=12 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=12 account_type=apikey transport=responses_websockets_v2 reason=upgrade_required dial_status=426 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=426 err=fail to WebSocket dial: expected handshake response status code 101 but got 426 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56572 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=12 attempt=1 reason=upgrade_required\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Dial426FallbackHTTP","Elapsed":0} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=21 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=21 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9812741+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=21 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=144 payload_key_sizes=input:34,type:15,previous_response_id:12,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:03.9817885+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:03.981Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=1 max_retries=5 reason=dial_fail backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.1022793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.102Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=2 max_retries=5 reason=dial_fail backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.3428975+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.342Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=3 max_retries=5 reason=dial_fail backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:04.8235262+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:04.823Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=4 max_retries=5 reason=dial_fail backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:05.7840243+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:05.784Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=21 retry=5 max_retries=5 reason=dial_fail backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=21 account_type=apikey ws_host=127.0.0.1:56574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":21,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=21 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=dial_fail force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=21 account_type=apikey transport=responses_websockets_v2 reason=dial_fail dial_status=404 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=404 err=fail to WebSocket dial: expected handshake response status code 101 but got 404 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56574 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.704Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=21 attempts=6 max_retries=5 reason=dial_fail\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7046906+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS (3.72s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackCoolingSkipWS","Elapsed":3.72} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled","Output":"=== RUN TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled","Output":"--- PASS: TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_ReturnErrorWhenOnlyWSv1Enabled","Elapsed":0} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Output":"=== RUN TestNewOpenAIGatewayService_InitializesOpenAIWSResolver\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] bootstrap enabled=false oauth_enabled=false apikey_enabled=false force_http=false responses_websockets_v2=false responses_websockets=false payload_log_sample_rate=0.000 event_flush_batch_size=0 event_flush_interval_ms=0 prewarm_cooldown_ms=0 retry_backoff_initial_ms=0 retry_backoff_max_ms=0 retry_jitter_ratio=0.000 retry_total_budget_ms=0 ws_read_limit_bytes=16777216\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Output":"--- PASS: TestNewOpenAIGatewayService_InitializesOpenAIWSResolver (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewOpenAIGatewayService_InitializesOpenAIWSResolver","Elapsed":0} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=41 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=41 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=41 account_type=apikey ws_host=127.0.0.1:56578 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=41 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":41,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:07.7053218+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=41 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=41 account_type=apikey transport=responses_websockets_v2 reason=upgrade_required dial_status=426 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=426 err=fail to WebSocket dial: expected handshake response status code 101 but got 426 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:56578 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2FallbackWhenResponseAlreadyWrittenReturnsWSError","Elapsed":0} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=88 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=88 account_type=apikey model=gpt-5.3-codex stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=88 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=111 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:07.7058333+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.705Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_1 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_1 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_1 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_1 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:07.7063443+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.706Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=1 max_retries=5 reason=read_event backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8269554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.826Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8269554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.826Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:07.8269554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.826Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_2 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_2 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.8281663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_2 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:07.828687+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_2 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"} {"Time":"2026-09-12T11:39:07.828687+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:07.828687+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:07.828Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=2 max_retries=5 reason=read_event backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0693777+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.069Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0693777+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.069Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:08.0693777+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.069Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_3 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_3 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_3 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_3 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0705862+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.070Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_3 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.0711045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:08.071Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_3 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"} {"Time":"2026-09-12T11:39:08.0711045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:08.0711045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:08.071Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=3 max_retries=5 reason=read_event backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5515344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.551Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5515344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.551Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:08.5515344+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.551Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5521451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_4 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5521451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_4 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5521451+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_4 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_4 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_4 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_4 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"} {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:08.5526743+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:08.552Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=4 max_retries=5 reason=read_event backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.5131019+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.5131019+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:09.5131019+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.513817+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_5 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.513817+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_5 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.513817+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_5 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.513Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_5 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:09.514Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_5 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:09.514Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_5 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"} {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:09.5144167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:09.514Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=88 retry=5 max_retries=5 reason=read_event backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4351075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=88 account_type=apikey ws_host=127.0.0.1:56580 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4351075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.435Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":88,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:11.4351075+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.435Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=88 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=88 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_88_6 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=88 conn_id=oa_ws_88_6 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=88 conn_id=oa_ws_88_6 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=88 conn_id=oa_ws_88_6 idx=1 type=response.created bytes=93 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4361322+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] buffer_enqueue account_id=88 conn_id=oa_ws_88_6 idx=1 event_idx=1 event_type=response.created buffer_size=1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=88 conn_id=oa_ws_88_6 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=1 token_events=0 terminal_events=0 buffered_pending=1 buffered_flushed=0 first_event=response.created last_event=response.created\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/su"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"b2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:777\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=88 attempts=6 max_retries=5 reason=read_event\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP (3.73s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2StreamEarlyCloseFallbackHTTP","Elapsed":3.73} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=89 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=89 account_type=apikey model=gpt-5.3-codex stream=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=89 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=111 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=true payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:11.4366479+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.436Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4371652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4371652+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_1 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_1 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"} {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:11.4376834+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.437Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=1 max_retries=5 reason=read_event backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.558079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.558079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:11.558079+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.5587324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.5587324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.5587324+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.558Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_2 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.5592712+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_2 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"} {"Time":"2026-09-12T11:39:11.5592712+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:11.5592712+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.559Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=2 max_retries=5 reason=read_event backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.7999255+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.799Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.7999255+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.799Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:11.7999255+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.799Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.8007185+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.800Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_3 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.800Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_3 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:11.801Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_3 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:11.801Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_3 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"} {"Time":"2026-09-12T11:39:11.8012442+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:11.8017706+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:11.801Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=3 max_retries=5 reason=read_event backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:12.281759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.281Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:12.281759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.281Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:12.281759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.281Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:12.2823636+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_4 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:12.2823636+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_4 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:12.2823636+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_4 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:12.2828857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_4 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"} {"Time":"2026-09-12T11:39:12.2828857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:12.2828857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:12.282Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=4 max_retries=5 reason=read_event backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:13.2431827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:13.2431827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:13.2431827+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_5 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_5 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_5 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_5 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"} {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:13.2437603+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:13.243Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=89 retry=5 max_retries=5 reason=read_event backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1643685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=89 account_type=apikey ws_host=127.0.0.1:62062 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1643685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":89,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:15.1643685+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=89 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=read_event force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1648745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=89 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_89_6 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1648745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=89 conn_id=oa_ws_89_6 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1648745+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.164Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=89 conn_id=oa_ws_89_6 stream=true payload_bytes=111 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=89 conn_id=oa_ws_89_6 wrote_downstream=false close_status=1011(StatusInternalError) close_reason=- cause=fail to get reader: received close frame: status = StatusInternalError and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:577\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/in"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"ternal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:859\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=89 attempts=6 max_retries=5 reason=read_event\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP (3.73s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2RetryFiveTimesThenFallbackHTTP","Elapsed":3.73} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=8901 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=8901 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=8901 account_type=apikey ws_host=127.0.0.1:62070 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=8901 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=112 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":8901,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:15.1654913+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.165Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=8901 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=8901 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_8901_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=8901 conn_id=oa_ws_8901_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=8901 conn_id=oa_ws_8901_1 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] read_fail account_id=8901 conn_id=oa_ws_8901_1 wrote_downstream=false close_status=1008(StatusPolicyViolation) close_reason=- cause=fail to get reader: received close frame: status = StatusPolicyViolation and reason = \\\"\\\" events=0 token_events=0 terminal_events=0 buffered_pending=0 buffered_flushed=0 first_event=- last_event=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=8901 attempt=1 reason=policy_violation\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PolicyViolationFastFallbackHTTP","Elapsed":0} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP"} {"Time":"2026-09-12T11:39:15.1661173+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=90 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=90 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=90 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=112 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_1 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1666258+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.166Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_1 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.1671362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.167Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_1 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"} {"Time":"2026-09-12T11:39:15.1671362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:15.1671362+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.167Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=1 max_retries=5 reason=ws_connection_limit_reached backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2877029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.287Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2877029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.287Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:15.2877029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.287Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_2 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_2 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"} {"Time":"2026-09-12T11:39:15.2883234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:15.2888396+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.288Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=2 max_retries=5 reason=ws_connection_limit_reached backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.5293302+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.5293302+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:15.5293302+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.529968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_3 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.529968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_3 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.529968+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.529Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_3 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:15.530Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_3 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:15.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_3 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"} {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:15.5304871+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:15.530Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=3 max_retries=5 reason=ws_connection_limit_reached backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0109005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.010Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0109005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.010Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:16.0109005+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.010Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0114053+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_4 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0114053+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_4 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0114053+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_4 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_4 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_4 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"} {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:16.0119193+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:16.011Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=4 max_retries=5 reason=ws_connection_limit_reached backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.9723822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.9723822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:16.9723822+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_5 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_5 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_5 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.972965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_5 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:16.9741572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:16.972Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_5 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"} {"Time":"2026-09-12T11:39:16.9741572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:16.9741572+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:16.974Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=90 retry=5 max_retries=5 reason=ws_connection_limit_reached backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8944234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.894Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=90 account_type=apikey ws_host=127.0.0.1:62072 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8944234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.894Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":90,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.8944234+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.894Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=90 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=ws_connection_limit_reached force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=90 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_90_6 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=90 conn_id=oa_ws_90_6 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=90 conn_id=oa_ws_90_6 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=90 conn_id=oa_ws_90_6 idx=1 type=err bytes=140 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=90 conn_id=oa_ws_90_6 idx=1 fallback_reason=ws_connection_limit_reached can_fallback=true err_code=websocket_connection_limit_reached err_type=server_err err_message=websocket connection limit reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpe"} {"Time":"2026-09-12T11:39:18.8951457+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"nAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1024\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=90 attempts=6 max_retries=5 reason=ws_connection_limit_reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP (3.73s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ConnectionLimitReachedRetryThenFallbackHTTP","Elapsed":3.73} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=91 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=91 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=91 account_type=apikey ws_host=127.0.0.1:50569 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=91 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=155 payload_key_sizes=input:34,previous_response_id:17,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":91,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.8956578+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.895Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=91 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=91 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_91_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=91 account_type=apikey conn_id=oa_ws_91_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=91 conn_id=oa_ws_91_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8961779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=91 conn_id=oa_ws_91_1 stream=false payload_bytes=155 previous_response_id=resp_prev_missing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=91 conn_id=oa_ws_91_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=91 conn_id=oa_ws_91_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1131\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=91 account_type=apikey conn_id=oa_ws_91_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery account_id=91 attempt=1 action=drop_previous_response_id retry=1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=91 account_type=apikey ws_host=127.0.0.1:50569 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":91,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.8966897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.896Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=91 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=previous_response_not_found force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=91 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_91_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=91 conn_id=oa_ws_91_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=91 conn_id=oa_ws_91_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8972143+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=91 conn_id=oa_ws_91_2 idx=1 type=response.completed bytes=186 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=91 conn_id=oa_ws_91_2 response_id=resp_ws_prev_recover_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=91 request_id=resp_ws_prev_recover_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundRecoversByDroppingPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=92 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=92 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=92 account_type=apikey ws_host=127.0.0.1:50572 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=92 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=183 payload_key_sizes=input:59,previous_response_id:17,type:15,model:13,stream:1 input_summary=items=1,text_chars=0,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":92,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.8977276+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.897Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=92 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=92 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_92_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=92 account_type=apikey conn_id=oa_ws_92_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=92 conn_id=oa_ws_92_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=92 conn_id=oa_ws_92_1 stream=false payload_bytes=183 previous_response_id=resp_prev_missing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=92 conn_id=oa_ws_92_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=92 conn_id=oa_ws_92_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1231\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=92 account_type=apikey conn_id=oa_ws_92_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery_skip account_id=92 attempt=1 reason=has_function_call_output previous_response_id_present=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=92 attempt=1 reason=previous_response_not_found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8982587+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryForFunctionCallOutput","Elapsed":0} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=93 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=93 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=93 account_type=apikey ws_host=127.0.0.1:50574 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=93 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=112 payload_key_sizes=input:34,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":93,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=93 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8987704+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=93 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_93_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.898Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=93 conn_id=oa_ws_93_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=93 conn_id=oa_ws_93_1 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=93 conn_id=oa_ws_93_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=93 conn_id=oa_ws_93_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1329\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=93 account_type=apikey conn_id=oa_ws_93_1 previous_response_id=- previous_response_id_kind=empty response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery_skip account_id=93 attempt=1 reason=missing_previous_response_id previous_response_id_present=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=93 attempt=1 reason=previous_response_not_found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundSkipsRecoveryWithoutPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.8992856+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=94 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=94 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=94 account_type=apikey ws_host=127.0.0.1:50576 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=94 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=155 payload_key_sizes=input:34,previous_response_id:17,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":94,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=94 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=94 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_94_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=94 account_type=apikey conn_id=oa_ws_94_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=94 conn_id=oa_ws_94_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=94 conn_id=oa_ws_94_1 stream=false payload_bytes=155 previous_response_id=resp_prev_missing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=94 conn_id=oa_ws_94_1 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=94 conn_id=oa_ws_94_1 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1426\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.8997979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.899Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=94 account_type=apikey conn_id=oa_ws_94_1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_prev_response_recovery account_id=94 attempt=1 action=drop_previous_response_id retry=1 previous_response_id=resp_prev_missing previous_response_id_kind=response_id\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=94 account_type=apikey ws_host=127.0.0.1:50576 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":94,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=94 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=previous_response_not_found force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=94 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_94_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=94 conn_id=oa_ws_94_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=94 conn_id=oa_ws_94_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=94 conn_id=oa_ws_94_2 idx=1 type=err bytes=135 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=94 conn_id=oa_ws_94_2 idx=1 fallback_reason=previous_response_not_found can_fallback=true err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGa"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"tewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1426\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.9003125+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] previous_response_not_found_diag account_id=94 account_type=apikey conn_id=oa_ws_94_2 previous_response_id=- previous_response_id_kind=empty response_id=- event_idx=1 req_stream=false store_disabled=false conn_reused=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false err_code=previous_response_not_found err_type=invalid_request_err err_message=previous response not found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=94 attempt=2 reason=previous_response_not_found\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2PreviousResponseNotFoundOnlyRecoversOnce","Elapsed":0} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=95 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=95 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=95 account_type=apikey ws_host=127.0.0.1:50579 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=95 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=254 payload_key_sizes=input:121,previous_response_id:19,type:15,model:13,stream:1 input_summary=items=3,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":95,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9008224+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=95 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.900Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=95 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_95_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=95 account_type=apikey conn_id=oa_ws_95_1 previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=95 conn_id=oa_ws_95_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=95 conn_id=oa_ws_95_1 stream=false payload_bytes=254 previous_response_id=resp_prev_encrypted\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=95 conn_id=oa_ws_95_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=95 conn_id=oa_ws_95_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1541\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery account_id=95 attempt=1 action=drop_encrypted_reasoning_items retry=1 previous_response_id_present=true previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id has_function_call_output=false dropped_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=95 account_type=apikey ws_host=127.0.0.1:50579 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":95,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=95 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=invalid_encrypted_content force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=95 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_95_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=95 conn_id=oa_ws_95_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9013357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=95 conn_id=oa_ws_95_2 stream=false payload_bytes=112 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=95 conn_id=oa_ws_95_2 idx=1 type=response.completed bytes=207 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=95 conn_id=oa_ws_95_2 response_id=resp_ws_invalid_encrypted_content_recover_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=95 request_id=resp_ws_invalid_encrypted_content_recover_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversOnce","Elapsed":0} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=96 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=96 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=96 account_type=apikey ws_host=127.0.0.1:50582 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=96 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=157 payload_key_sizes=input:34,previous_response_id:19,type:15,model:13,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":96,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=96 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9018449+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=96 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_96_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.901Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=96 account_type=apikey conn_id=oa_ws_96_1 previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=96 conn_id=oa_ws_96_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=96 conn_id=oa_ws_96_1 stream=false payload_bytes=157 previous_response_id=resp_prev_encrypted\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=96 conn_id=oa_ws_96_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=96 conn_id=oa_ws_96_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1645\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery_skip account_id=96 attempt=1 reason=missing_encrypted_reasoning_items\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=96 attempt=1 reason=invalid_encrypted_content\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentSkipsRecoveryWithoutReasoningItem","Elapsed":0} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=97 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=97 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=97 account_type=apikey ws_host=127.0.0.1:50584 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=97 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=219 payload_key_sizes=previous_response_id:19,type:15,model:13,stream:1,input:-1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":97,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9023554+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=97 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=97 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_97_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=97 account_type=apikey conn_id=oa_ws_97_1 previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=97 conn_id=oa_ws_97_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=97 conn_id=oa_ws_97_1 stream=false payload_bytes=219 previous_response_id=resp_prev_encrypted\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=97 conn_id=oa_ws_97_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=97 conn_id=oa_ws_97_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1761\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery account_id=97 attempt=1 action=drop_encrypted_reasoning_items retry=1 previous_response_id_present=true previous_response_id=resp_prev_encrypted previous_response_id_kind=response_id has_function_call_output=false dropped_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=97 account_type=apikey ws_host=127.0.0.1:50584 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":97,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9028634+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.902Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=97 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=invalid_encrypted_content force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=97 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_97_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=97 conn_id=oa_ws_97_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=97 conn_id=oa_ws_97_2 stream=false payload_bytes=147 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=97 conn_id=oa_ws_97_2 idx=1 type=response.completed bytes=206 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=97 conn_id=oa_ws_97_2 response_id=resp_ws_invalid_encrypted_content_object_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=97 request_id=resp_ws_invalid_encrypted_content_object_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentRecoversSingleObjectInputAndKeepsSummary","Elapsed":0} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=98 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.3-codex stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=98 account_type=apikey model=gpt-5.3-codex stream=false has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=98 account_type=apikey ws_host=127.0.0.1:50587 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=98 attempt=1 event=response.create payload_keys=input,model,previous_response_id,stream,type payload_bytes=239 payload_key_sizes=input:104,previous_response_id:23,type:15,model:13,stream:1 input_summary=items=2,text_chars=0,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=true has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":98,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9033733+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=98 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=98 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_98_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=98 account_type=apikey conn_id=oa_ws_98_1 previous_response_id=resp_prev_function_call previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=98 conn_id=oa_ws_98_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=98 conn_id=oa_ws_98_1 stream=false payload_bytes=239 previous_response_id=resp_prev_function_call\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=98 conn_id=oa_ws_98_1 idx=1 type=err bytes=150 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=98 conn_id=oa_ws_98_1 idx=1 fallback_reason=invalid_encrypted_content can_fallback=true err_code=invalid_encrypted_content err_type=invalid_request_err err_message=The encrypted content could not be verified.\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":".TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_protocol_forward_test.go:1879\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_invalid_encrypted_content_recovery account_id=98 attempt=1 action=drop_encrypted_reasoning_items retry=1 previous_response_id_present=true previous_response_id=resp_prev_function_call previous_response_id_kind=response_id has_function_call_output=true dropped_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9038793+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=98 account_type=apikey ws_host=127.0.0.1:50587 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.903Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":98,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=98 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=true session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=invalid_encrypted_content force_new_conn=false header_user_agent=custom-client/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=98 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_98_2 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=true\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] continuation_probe account_id=98 account_type=apikey conn_id=oa_ws_98_2 previous_response_id=resp_prev_function_call previous_response_id_kind=response_id preferred_conn_id=- conn_reused=false store_disabled=false session_hash=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_turn_state=false turn_state_len=0 has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=98 conn_id=oa_ws_98_2 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=98 conn_id=oa_ws_98_2 stream=false payload_bytes=191 previous_response_id=resp_prev_function_call\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=98 conn_id=oa_ws_98_2 idx=1 type=response.completed bytes=220 token=false terminal=true buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] completed account_id=98 conn_id=oa_ws_98_2 response_id=resp_ws_invalid_encrypted_content_function_call_output_ok stream=false duration_ms=1 events=1 token_events=0 terminal_events=1 buffered_events=0 buffered_flushed=0 first_event=response.completed last_event=response.completed first_token_ms=-1 wrote_downstream=false client_disconnected=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_succeeded account_id=98 request_id=resp_ws_invalid_encrypted_content_function_call_output_ok stream=false has_first_token_ms=false first_token_ms=0 ws_attempts=2\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2InvalidEncryptedContentKeepsPreviousResponseIDForFunctionCallOutput","Elapsed":0} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先"} {"Time":"2026-09-12T11:39:18.9044016+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/v2优先\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/v2优先 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2优先","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OpenAI_setup_token复用OAuth开关","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/非OpenAI_setup_token不进入OAuth_WS","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/v2关闭时回退v1","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/透传开关不影响WS协议判定","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号级强制HTTP","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局强制HTTP无需启用mode_router","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/全局关闭保持HTTP","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/账号开关关闭保持HTTP","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/OAuth账号不会读取API_Key专用开关","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/兼容旧键openai_ws_enabled","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/按账号类型开关控制","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/API_Key_账号关闭开关时回退HTTP","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve/未知认证类型回退HTTP","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/ctx_pool_mode_routes_to_ws_v2","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/off_mode_routes_to_http","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/legacy_boolean_maps_to_ctx_pool_in_v2_router","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/passthrough_mode_routes_to_ws_v2","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/http_bridge_mode_routes_to_http_sse","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router","Output":"=== RUN TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2/non-positive_concurrency_is_rejected_in_v2_router","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2","Output":"--- PASS: TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSProtocolResolver_Resolve_ModeRouterV2","Elapsed":0} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=501 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=501 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=501 account_type=apikey ws_host=127.0.0.1:50590 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=501 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":501,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9049643+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.904Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=501 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] connected account_id=501 account_type=apikey transport=responses_websockets_v2 conn_id=oa_ws_501_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] handshake account_id=501 conn_id=oa_ws_501_1 has_turn_state=false turn_state_len=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] write_request_sent account_id=501 conn_id=oa_ws_501_1 stream=false payload_bytes=106 previous_response_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] event_received account_id=501 conn_id=oa_ws_501_1 idx=1 type=err bytes=153 token=false terminal=false buffered_pending=0\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":501,\"platform\":\"openai\",\"reset_at\":\"2026-09-12T05:39:18.000Z\",\"reset_in\":7199000}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] error_event account_id=501 conn_id=oa_ws_501_1 idx=1 fallback_reason=upstream_rate_limited can_fallback=false err_code=rate_limit_exceeded err_type=usage_limit_reached err_message=The usage limit has been reached\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).forwardOpenAIWSV2\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_v2.go:680\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).Forward\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_gateway_forward.go:873\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayS"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"ervice_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_ratelimit_signal_test.go:162\\ntesting.tRunner\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/testing/testing.go:2193\"}\n"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2ErrorEventUsageLimitPersistsRateLimit","Elapsed":0} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit"} {"Time":"2026-09-12T11:39:18.9054759+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=502 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.1 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=502 account_type=apikey model=gpt-5.1 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=502 account_type=apikey ws_host=127.0.0.1:50592 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=502 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=106 payload_key_sizes=input:34,type:15,model:7,stream:1 input_summary=items=1,text_chars=5,image_data_urls=0,image_data_url_chars=0,image_remote_urls=0 stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":502,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=502 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=502 account_type=apikey transport=responses_websockets_v2 reason=upstream_rate_limited dial_status=429 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=- cause=openai ws dial fail: status=429 err=fail to WebSocket dial: expected handshake response status code 101 but got 429 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50592 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"logger\":\"slog\",\"msg\":\"openai_429_7d_limit_exhausted\",\"service\":\"sub2api\",\"env\":\"test\",\"reset_after_seconds\":7200,\"reset_at\":\"2026-09-12T05:39:18.905Z\"}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"logger\":\"slog\",\"msg\":\"openai_account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":502,\"reset_at\":\"2026-09-12T05:39:18.905Z\"}\n"} {"Time":"2026-09-12T11:39:18.9059857+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.905Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_stop account_id=502 attempt=1 reason=upstream_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake429PersistsRateLimit","Elapsed":0} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=504 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=504 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=504 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:18.906Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:18.906Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":1,\"cooldown_ms\":0,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:18.9064936+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:18.906Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=1 max_retries=5 reason=upstream_5xx backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.0269272+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.026Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.0274301+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:19.0274301+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.027Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.027Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":2,\"cooldown_ms\":10000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.0279461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.027Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=2 max_retries=5 reason=upstream_5xx backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.268Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.268Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":3,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.2686557+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.268Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=3 max_retries=5 reason=upstream_5xx backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.749Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.749Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:19.749Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.7494499+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.749Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:19.7501749+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:19.749Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":4,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:19.7501749+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.750Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:19.7501749+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:19.750Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=4 max_retries=5 reason=upstream_5xx backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:20.7103659+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:20.710Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:20.710Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":5,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:20.7107289+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:20.710Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=5 max_retries=5 reason=upstream_5xx backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":6,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6311965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=504 attempts=6 max_retries=5 reason=upstream_5xx\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] selected account_id=504 account_type=apikey transport=responses_websockets_v2 reason=ws_v2_enabled model=gpt-5.5 stream=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] forward_start account_id=504 account_type=apikey model=gpt-5.5 stream=false has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] [debug] payload_schema account_id=504 attempt=1 event=response.create payload_keys=input,model,stream,type payload_bytes=75 payload_key_sizes=type:15,model:7,input:5,stream:1 input_summary=- stream=false payload_strategy=full removed_keys=- has_previous_response_id=false has_prompt_cache_key=false has_tools=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=- force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.631Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":7,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.6316981+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.631Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=1 max_retries=5 reason=upstream_5xx backoff_ms=120\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.752Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.752Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":8,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.7521677+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.752Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=2 max_retries=5 reason=upstream_5xx backoff_ms=240\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.992Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.992Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:22.992Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.993Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:22.993Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":9,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.993Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:22.9931808+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:22.993Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=3 max_retries=5 reason=upstream_5xx backoff_ms=480\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:23.473Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:23.473Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":10,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:23.4735998+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:23.473Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=4 max_retries=5 reason=upstream_5xx backoff_ms=960\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:24.433Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:24.433Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":11,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:24.4338882+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:24.433Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_retry account_id=504 retry=5 max_retries=5 reason=upstream_5xx backoff_ms=1920\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3545452+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.354Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] dial_target account_id=504 account_type=apikey ws_host=127.0.0.1:50594 ws_path=/v1/responses\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3545452+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.354Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":504,\"final_model\":\"gpt-5.5\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:26.3545452+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.354Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] acquire_start account_id=504 account_type=apikey transport=responses_websockets_v2 preferred_conn_id=- has_previous_response_id=false session_hash=- has_turn_state=false turn_state_len=0 has_turn_metadata=false turn_metadata_len=0 store_disabled=false store_disabled_conn_mode=off retry_last_reason=upstream_5xx force_new_conn=false header_user_agent=unit-test-agent/1.0 header_openai_beta=responses_websockets=2026-02-06 header_originator=- header_accept_language=- header_session_id=- header_conversation_id=- session_id_source=none conversation_id_source=none has_prompt_cache_key=false has_chatgpt_account_id=false has_authorization=true has_session_id=false has_conversation_id=false proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:26.354Z\",\"logger\":\"slog\",\"msg\":\"account_upstream_error\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"status_code\":502}\n"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"WARN\",\"time\":\"2026-09-12T03:39:26.355Z\",\"logger\":\"slog\",\"msg\":\"openai_model_transient_state\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":504,\"model\":\"gpt-5.5\",\"failure_streak\":12,\"cooldown_ms\":45000,\"block_scope\":\"account_model\"}\n"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] acquire_fail account_id=504 account_type=apikey transport=responses_websockets_v2 reason=upstream_5xx dial_status=502 dial_class=dial_err dial_close_status=- dial_close_reason=- dial_resp_server=- dial_resp_via=- dial_resp_cf_ray=- dial_resp_x_request_id=req-ws-502 cause=openai ws dial fail: status=502 err=fail to WebSocket dial: expected handshake response status code 101 but got 502 preferred_conn_id=- force_new_conn=false ws_host=127.0.0.1:50594 ws_path=/v1/responses proxy_enabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] reconnect_exhausted account_id=504 attempts=6 max_retries=5 reason=upstream_5xx\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient (7.45s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2Handshake502RecordsModelTransient","Elapsed":7.45} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit"} {"Time":"2026-09-12T11:39:26.3551121+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"=== RUN TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:26.3557054+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"responses_websockets_v2\",\"account_id\":503,\"final_model\":\"gpt-5.1\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"soft_routing_hint\"}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_protocol_confirm account_id=503 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com ws_path=/v1/responses ws_mode=ctx_pool store_disabled=false has_session_hash=true has_previous_response_id=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.355Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_start account_id=503 account_type=apikey transport=responses_websockets_v2 ws_host=api.openai.com preferred_conn_id=- has_session_hash=true has_previous_response_id=false store_disabled=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_connected account_id=503 turn=1 conn_id=oa_ws_503_1 conn_reused=false conn_pick_ms=0 queue_wait_ms=0 preferred_conn_id=-\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_turn_request_sent account_id=503 turn=1 conn_id=oa_ws_503_1 payload_bytes=59\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:26.356Z\",\"logger\":\"slog\",\"msg\":\"account_rate_limited\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":503,\"platform\":\"openai\",\"reset_at\":\"2026-09-12T05:09:26.000Z\",\"reset_in\":5399000}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"ERROR\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] ingress_ws_error_event account_id=503 turn=1 conn_id=oa_ws_503_1 idx=1 fallback_reason=upstream_rate_limited err_code=rate_limit_exceeded err_type=usage_limit_reached err_message=The usage limit has been reached previous_response_id=- previous_response_id_kind=empty response_id=- store_disabled=false has_prompt_cache_key=false\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true,\"stacktrace\":\"github.com/Wei-Shaw/sub2api/internal/service.logOpenAIWSModeInfo\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_logutil.go:515\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResponsesWebSocketFromClient.func10\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1113\\ngithub.com/Wei-Shaw/sub2api/internal/service.(*OpenAIGatewayService).ProxyResponsesWebSocketFromCli"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"ent\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_forwarder_ingress.go:1785\\ngithub.com/Wei-Shaw/sub2api/internal/service.TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit.func1\\n\\tC:/Users/30214/Desktop/sub2本地/sub2新站/backend/internal/service/openai_ws_ratelimit_signal_test.go:369\\nnet/http.HandlerFunc.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2338\\nnet/http.serverHandler.ServeHTTP\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:3413\\nnet/http.(*conn).serve\\n\\tC:/Users/30214/Desktop/sub2本地/.tools/go/src/net/http/server.go:2137\"}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:26.356Z\",\"msg\":\"[debug] [OpenAI WS Mode][openai_ws_mode=true] ingress_ws_upstream_released account_id=503 conn_id=oa_ws_503_1\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Output":"--- PASS: TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_ProxyResponsesWebSocketFromClient_ErrorEventUsageLimitPersistsRateLimit","Elapsed":0} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit"} {"Time":"2026-09-12T11:39:26.3562805+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ExhaustedSnapshotDoesNotSetRateLimit","Elapsed":2} {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit"} {"Time":"2026-09-12T11:39:28.35667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_NonExhaustedSnapshotDoesNotSetRateLimit","Elapsed":0.2} {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites"} {"Time":"2026-09-12T11:39:28.5572974+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Output":"=== RUN TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Output":"--- PASS: TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_UpdateCodexUsageSnapshot_ThrottlesExtraWrites","Elapsed":0.2} {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit"} {"Time":"2026-09-12T11:39:28.7576192+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"=== RUN TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"--- PASS: TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_GetSchedulableAccount_ExhaustedCodexExtraDoesNotSetRateLimit","Elapsed":2} {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit"} {"Time":"2026-09-12T11:39:30.7577514+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"=== RUN TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Output":"--- PASS: TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit (2.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAdminService_ListAccounts_ExhaustedCodexExtraDoesNotSetRateLimit","Elapsed":2} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Output":"=== RUN TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Output":"--- PASS: TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSErrorHTTPStatusFromRaw_UsageLimitReachedIs429","Elapsed":0} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Output":"=== RUN TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.7581568+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Output":"--- PASS: TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRateLimitFailoverError_OAuthKeepsSameAccountDeadline","Elapsed":0} {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded"} {"Time":"2026-09-12T11:39:32.7587334+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Output":"=== RUN TestOpenAIWSReplayStateBuildAllocationBounded\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Output":"--- PASS: TestOpenAIWSReplayStateBuildAllocationBounded (0.10s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplayStateBuildAllocationBounded","Elapsed":0.1} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Output":"=== RUN TestOpenAIWSStateStore_BindGetDeleteResponseAccount\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Output":"--- PASS: TestOpenAIWSStateStore_BindGetDeleteResponseAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_BindGetDeleteResponseAccount","Elapsed":0} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Output":"=== RUN TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Output":"--- PASS: TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_HTTPResponseOwnerPersistsAcrossStoreInstances","Elapsed":0} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL"} {"Time":"2026-09-12T11:39:32.8568434+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL","Output":"=== RUN TestOpenAIWSStateStore_ResponseConnTTL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL","Output":"--- PASS: TestOpenAIWSStateStore_ResponseConnTTL (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_ResponseConnTTL","Elapsed":0.06} {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL"} {"Time":"2026-09-12T11:39:32.9174116+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL","Output":"=== RUN TestOpenAIWSStateStore_SessionTurnStateTTL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.9777041+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL","Output":"--- PASS: TestOpenAIWSStateStore_SessionTurnStateTTL (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:32.9777041+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionTurnStateTTL","Elapsed":0.06} {"Time":"2026-09-12T11:39:32.9782398+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL"} {"Time":"2026-09-12T11:39:32.9782398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL","Output":"=== RUN TestOpenAIWSStateStore_SessionConnTTL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL","Output":"--- PASS: TestOpenAIWSStateStore_SessionConnTTL (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_SessionConnTTL","Elapsed":0.06} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss","Output":"=== RUN TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss","Output":"--- PASS: TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_GetResponseAccount_NoStaleAfterCacheMiss","Elapsed":0} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Output":"=== RUN TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Output":"--- PASS: TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_MaybeCleanupRemovesExpiredIncrementally","Elapsed":0} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout"} {"Time":"2026-09-12T11:39:33.0377944+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Output":"=== RUN TestOpenAIWSStateStore_RedisOpsUseShortTimeout\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Output":"--- PASS: TestOpenAIWSStateStore_RedisOpsUseShortTimeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStore_RedisOpsUseShortTimeout","Elapsed":0} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext"} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Output":"=== RUN TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Output":"--- PASS: TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWithOpenAIWSStateStoreRedisTimeout_WithParentContext","Elapsed":0} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn"} {"Time":"2026-09-12T11:39:33.0383136+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn","Output":"=== RUN TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn","Output":"--- PASS: TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSPassthroughTurnLifecycle_SerializesTerminalCommitAndNextTurn","Elapsed":0.05} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Output":"=== RUN TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Output":"--- PASS: TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestWriteOpenAIFastPolicyBlockedResponseMarksBusinessLimited","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/filter_不能为空","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time/end_time_必填","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/start_time_不能晚于_end_time","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/group_id_必须大于_0","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_与分页参数互斥","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/top_n_参数越界","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation/page_size_参数越界","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_Validation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_Validation","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_DefaultPagination\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_DefaultPagination (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_DefaultPagination","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Output":"=== RUN TestOpsServiceGetOpenAITokenStats_RepoUnavailable\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Output":"--- PASS: TestOpsServiceGetOpenAITokenStats_RepoUnavailable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpsServiceGetOpenAITokenStats_RepoUnavailable","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Output":"=== RUN TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Output":"--- PASS: TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpsAdvancedSettings_DefaultSnapshotHidesOpenAITokenStats","Elapsed":0} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility"} {"Time":"2026-09-12T11:39:33.0886982+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Output":"=== RUN TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Output":"--- PASS: TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpdateOpsAdvancedSettings_PersistsOpenAITokenStatsVisibility","Elapsed":0} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Output":"=== RUN TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Output":"--- PASS: TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ReadsDefaultsFromOpsAdvancedSettings","Elapsed":0} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Output":"=== RUN TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Output":"--- PASS: TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIQuotaAutoPauseSettings_ColdCacheNonBlocking","Elapsed":0} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Output":"=== RUN TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Output":"--- PASS: TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.089461+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIQuotaAutoPauseSettings_VisibleImmediately","Elapsed":0} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Output":"=== RUN TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Output":"--- PASS: TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Elapsed":0} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Output":"=== RUN TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Output":"--- PASS: TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayPluginRoutingPreservesAPIKeyAndFailsClosedForOAuth","Elapsed":0} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration"} {"Time":"2026-09-12T11:39:33.0899806+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Output":"=== RUN TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Output":"--- PASS: TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuiltInOpenAITransportPublisherDoesNotRequireConfiguration","Elapsed":0} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"=== RUN TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing][SparkBilling] gpt-5.3-codex-spark -\u003e gpt-5.1-codex billing\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex-spark -\u003e gpt-5.1-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Output":"--- PASS: TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexSparkUsesGpt51CodexPricing","Elapsed":0} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"=== RUN TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex -\u003e gpt-5.2-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Output":"--- PASS: TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_Gpt53CodexFallbackStillUsesGpt52Codex","Elapsed":0} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Output":"=== RUN TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.3-codex -\u003e gpt-5.2-codex\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Output":"--- PASS: TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAIFallbackMatchedLoggedAsInfo","Elapsed":0} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Output":"=== RUN TestGetModelPricing_OpenAICompactAliasUsesStaticFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.091Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.5 -\u003e gpt-5.4(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Output":"--- PASS: TestGetModelPricing_OpenAICompactAliasUsesStaticFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetModelPricing_OpenAICompactAliasUsesStaticFallback","Elapsed":0} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates"} {"Time":"2026-09-12T11:39:33.0915642+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Output":"=== RUN TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0943017+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Output":"--- PASS: TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0943017+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDefaultPricingUsesCurrentCodexAutoReviewBaseRates","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Output":"=== RUN TestGetCodexRestrictionPolicy\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Output":"--- PASS: TestGetCodexRestrictionPolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Output":"=== RUN TestGetCodexRestrictionPolicy_DefaultsSafe\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Output":"--- PASS: TestGetCodexRestrictionPolicy_DefaultsSafe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_DefaultsSafe","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Output":"=== RUN TestGetCodexRestrictionPolicy_InvalidJSONSafe\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Output":"--- PASS: TestGetCodexRestrictionPolicy_InvalidJSONSafe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_InvalidJSONSafe","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_appends_Claude_Code_entry_to_whitelist","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Output":"=== RUN TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting/legacy_true_does_not_duplicate_existing_Claude_Code_entry","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Output":"--- PASS: TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateOpenAIAllowClaudeCodeCodexPluginSetting","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/显式_true_开启","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/缺失默认_false","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Output":"=== RUN TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients/非_true_值视为_false","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Output":"--- PASS: TestGetCodexRestrictionPolicy_AllowAppServerClients (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_AllowAppServerClients","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/键缺失_→_默认种子(只勾x-codex-)","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/显式配置_→_原样采用","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Output":"=== RUN TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals/非法JSON_→_回落默认种子","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Output":"--- PASS: TestGetCodexRestrictionPolicy_EngineFingerprintSignals (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexRestrictionPolicy_EngineFingerprintSignals","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键已存在_→_不动","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=true_→_写种子且body行Required=true","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Output":"=== RUN TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾) (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals/信号键缺失_+_旧body=false/缺_→_写种子(body不勾)","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Output":"--- PASS: TestMigrateCodexBodyFingerprintToSignals (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMigrateCodexBodyFingerprintToSignals","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Output":"=== RUN TestValidateCodexClientEntriesJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Output":"--- PASS: TestValidateCodexClientEntriesJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexClientEntriesJSON","Elapsed":0} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Output":"=== RUN TestValidateCodexWhitelistEntriesJSON\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Output":"--- PASS: TestValidateCodexWhitelistEntriesJSON (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0948415+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateCodexWhitelistEntriesJSON","Elapsed":0} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Output":"=== RUN TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Output":"--- PASS: TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeNonOpenAIWithoutBaseURLIsUnsupportedWithoutRequest","Elapsed":0} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Output":"=== RUN TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Output":"--- PASS: TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestUpstreamBillingProbeOpenAIDefaultBaseURLPreserved","Elapsed":0} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"=== RUN TestBuildOpenAIModelsURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"=== PAUSE TestBuildOpenAIModelsURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Output":"=== RUN TestBuildUpstreamModelsRequestSupportsOpenAIOAuth\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Output":"--- PASS: TestBuildUpstreamModelsRequestSupportsOpenAIOAuth (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildUpstreamModelsRequestSupportsOpenAIOAuth","Elapsed":0} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Output":"=== RUN TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Output":"--- PASS: TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIOAuthManifest","Elapsed":0} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"=== RUN TestFetchUpstreamSupportedModelsParsesOpenAIResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"=== PAUSE TestFetchUpstreamSupportedModelsParsesOpenAIResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"=== RUN TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"=== PAUSE TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField"} {"Time":"2026-09-12T11:39:33.0953828+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Output":"=== RUN TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Output":"--- PASS: TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSyncUpstreamModelCatalogEnrichesOfficialOpenAIHostWithoutRegistryAPIField","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/../../x/y","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..%2f..%2fx/y","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%2e%2e/%2e%2e/x","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//responses/%2e%2e%2fx","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//backend-api/codex/responses/../../../x","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/..\\..\\x","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/%3fa=b","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses/x%23frag","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths//v1/responses//double","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/compact","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses/input_tokens","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/ (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/responses/compact/","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/backend-api/codex/responses/compact","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses","Output":"=== RUN TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths/forwardable_/v1/responses","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Output":"--- PASS: TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIResponsesRequestPathSuffixRejectsNonConformingSubpaths","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Output":"=== RUN TestIsOpenAIResponsesInputTokensRequestPath\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Output":"--- PASS: TestIsOpenAIResponsesInputTokensRequestPath (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesInputTokensRequestPath","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/v1/responses/compact/detail","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/ (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/legacy_/responses/compact/","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/openai/v1/responses","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/responses","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/backend-api/codex/responses","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel","Output":"=== RUN TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape/non_legacy_/v1/responses/resp_123/cancel","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Output":"--- PASS: TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIResponsesCompactPathUsesLegacyEndpointShape","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Output":"=== RUN TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Output":"--- PASS: TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAppendOpenAIResponsesRequestPathSuffixRefusesUnsafeSuffix","Elapsed":0} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Output":"=== RUN TestObserveOpenAISSEBodyIgnoresMalformedPayload\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Output":"--- PASS: TestObserveOpenAISSEBodyIgnoresMalformedPayload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0958881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestObserveOpenAISSEBodyIgnoresMalformedPayload","Elapsed":0} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"=== CONT TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"=== CONT TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"=== CONT TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"=== CONT TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.096Z\",\"logger\":\"slog\",\"msg\":\"openai_token_cache_hit\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":100}\n"} {"Time":"2026-09-12T11:39:33.0963961+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"=== CONT TestBuildCodexModelsManifestKeepsKnownReasoningChoices\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"=== CONT TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Output":"--- PASS: TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesUltrafastServiceTierForSol","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsHonorsCustomListAndFinalETag","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"=== CONT TestBuildCodexModelsManifestOmitsDedicatedImageModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Output":"--- PASS: TestBuildCodexModelsManifestKeepsKnownReasoningChoices (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestKeepsKnownReasoningChoices","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"=== CONT TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Output":"--- PASS: TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestUsesSingleNoneReasoningChoiceForCustomModel","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"=== CONT TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Output":"--- PASS: TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestAdvertisesPriorityServiceTierForFastGPTModels","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsKeepsExplicitAutoReviewSelection","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"=== CONT TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"=== CONT TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Output":"--- PASS: TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBilling_FastMultiplierOverridesEnforcedRatio","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"=== CONT TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialGrokResponsesImageInput","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"=== CONT TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"=== CONT TestFetchUpstreamSupportedModelsParsesOpenAIResponse\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"=== CONT TestBuildOpenAIModelsURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"=== CONT TestOpenAIWSReplaySequenceSharesBodies\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"=== CONT TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"=== CONT TestFilterCodexModelIDsForGroupOmitsWildcardKeys\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAccountMappedAutoReviewByDefault","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"=== CONT TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Output":"--- PASS: TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMatchModelsDevProviderFallsBackToOpenAIProviderWithoutAPIField","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsFiltersAutoReviewByDefault","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestFallsThroughWithoutConfiguration","Elapsed":0} {"Time":"2026-09-12T11:39:33.0969031+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Output":"--- PASS: TestFetchUpstreamSupportedModelsParsesOpenAIResponse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFetchUpstreamSupportedModelsParsesOpenAIResponse","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"=== CONT TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Output":"--- PASS: TestFilterCodexModelIDsForGroupOmitsWildcardKeys (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestFilterCodexModelIDsForGroupOmitsWildcardKeys","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"=== CONT TestCombineOpenAIWSReplayItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"=== CONT TestValidateOpenAIServiceTierField\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Output":"--- PASS: TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNewConfiguredCodexModelDescriptorUsesProviderMetadataAndSafeFallback","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history","Output":"=== RUN TestCombineOpenAIWSReplayItems/empty_delta_returns_history\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"=== CONT TestSetOpenAIWSPayloadInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Output":"--- PASS: TestBuildCodexModelsManifestOmitsDedicatedImageModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestOmitsDedicatedImageModels","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items","Output":"=== RUN TestSetOpenAIWSPayloadInputSequence/set_items\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFillsMissingProviderFieldsWithoutOverwritingExplicitMetadata","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"=== CONT TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Output":"--- PASS: TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupKeepsCrossPlatformAliasAmbiguityClosed","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items","Output":"--- PASS: TestSetOpenAIWSPayloadInputSequence/set_items (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/set_items","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"=== CONT TestBuildCodexModelsManifestForGroupLoadsAccountsOnce\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5_catalog_2x_priority_is_corrected_to_2.5x","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupDoesNotAdvertiseNoneWhenAccountReasoningConflicts","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null","Output":"=== RUN TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null","Output":"--- PASS: TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence/preserve_empty_array_not_null","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Output":"--- PASS: TestSetOpenAIWSPayloadInputSequence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSetOpenAIWSPayloadInputSequence","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.4_keeps_2x","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.6_family_keeps_2x","Elapsed":0} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails"} {"Time":"2026-09-12T11:39:33.0974167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"=== CONT TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"=== CONT TestBuildOpenAIWSReplayInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_use_current","Elapsed":0} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== RUN TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"=== CONT TestNormalizeOpenAIWSJSONForCompare\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"=== CONT TestCollectOpenAIEncryptedContentDigestsRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"=== CONT TestBuildOpenAIEmbeddingsURL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/both_missing_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/both_missing_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"=== CONT TestOpenAIWSIngressPreviousResponseRecoveryEnabled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"=== CONT TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/bare_domain\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"=== CONT TestIsOpenAIWSIngressPreviousResponseNotFound\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"=== CONT TestApplyGrokImagineImageGeometryMapsOpenAISize\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/bare_domain\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/bare_/v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.1\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"c8b82dd52b41c996\"}\n"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/bare_/v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"gpt-5.4\",\"normalized_model\":\"gpt-5.4\",\"billing_model\":\"gpt-5.1\",\"upstream_model\":\"gpt-5.4\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"c8b82dd52b41c996\"}\n"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"=== CONT TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/openai_v1_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/openai_v1_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"=== RUN TestBuildOpenAIModelsURL/models_url_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"=== PAUSE TestBuildOpenAIModelsURL/models_url_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"=== RUN TestBuildOpenAIModelsURL/host_fallback_uses_v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"=== PAUSE TestBuildOpenAIModelsURL/host_fallback_uses_v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/array_prefix_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/array_prefix_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.097Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"=== RUN TestBuildOpenAIModelsURL/trailing_slash_on_v4\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"=== CONT TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"=== PAUSE TestBuildOpenAIModelsURL/trailing_slash_on_v4\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history","Output":"--- PASS: TestCombineOpenAIWSReplayItems/empty_delta_returns_history (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/empty_delta_returns_history","Elapsed":0} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority"} {"Time":"2026-09-12T11:39:33.0979231+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority","Output":"=== RUN TestValidateOpenAIServiceTierField/fast_normalizes_to_priority\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"=== CONT TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority","Output":"--- PASS: TestValidateOpenAIServiceTierField/fast_normalizes_to_priority (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/fast_normalizes_to_priority","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"=== CONT TestResolvedOpenAIUpstreamServiceTier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/upstream_echo_stays_separate_from_outbound_tier","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"=== CONT TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesMappedTargetMetadataForCompositeAlias","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentFromReplayItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"=== CONT TestOpenAIWSExtractNormalizedInputSequence\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Output":"--- PASS: TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetOpenAIUsage_SparkShadow_WritesExtraAndReturnsNonEmptyWindows","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Output":"--- PASS: TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackToSchedulableWhenAvailabilityLookupFails","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Output":"--- PASS: TestBuildCodexModelsManifestForGroupLoadsAccountsOnce (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupLoadsAccountsOnce","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Output":"--- PASS: TestNormalizeOpenAIWSJSONForCompare (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompare","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesExplicitCompositeResponsesRouteModel","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesAccountMappingOwnershipAndMappedModel","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Output":"--- PASS: TestCollectOpenAIEncryptedContentDigestsRaw (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCollectOpenAIEncryptedContentDigestsRaw","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesKnownGPTImageFallback","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Output":"--- PASS: TestOpenAIWSIngressPreviousResponseRecoveryEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSIngressPreviousResponseRecoveryEnabled","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesFallbackWhenTextOnlyPlatformHasNoSnapshot","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Output":"--- PASS: TestIsOpenAIWSIngressPreviousResponseNotFound (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSIngressPreviousResponseNotFound","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Output":"--- PASS: TestApplyGrokImagineImageGeometryMapsOpenAISize (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyGrokImagineImageGeometryMapsOpenAISize","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsDifferentMappedTargetsWithoutLeakingAlias","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsSyncedAccountMetadata","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesOfficialOpenAIResponsesImageInput","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Output":"--- PASS: TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupOmitsDedicatedMediaTargetAlias","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Output":"--- PASS: TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplateUsesCachedTemplateContent","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/empty_payload\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_upstream_echo_falls_back_to_outbound_tier","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/empty_payload (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/empty_payload","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSafeFallbackForConflictingAliasTargets","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/observed_tier_never_promotes_an_untiered_request","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"=== RUN TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"=== PAUSE TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_missing\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"=== CONT TestNormalizeOpenAIWSJSONForCompareOrRaw\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_missing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_missing","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/no_previous_response_id_custom_tool_history_does_not_accumulate","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"=== CONT TestIsOpenAIWSClientDisconnectError\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"=== CONT TestOpenAIFastBillingMultiplier_2xAnd25x\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/extract_shares_payload_backing_array","Elapsed":0} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"=== CONT TestOpenAIWSEventShouldParseUsageTerminalEvents\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"=== CONT TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"=== CONT TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"=== CONT TestForwardAsAnthropic_ReusesOAuthCodexTurnState\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"=== CONT TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"=== CONT TestNormalizeOpenAIMessagesDispatchModelConfig\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/v2_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"=== CONT TestNormalizeOpenAICompatRequestedModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/v2_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.3-codex\",\"upstream_model\":\"gpt-5.3-codex\",\"stream\":true,\"compat_prompt_cache_key_injected\":true,\"compat_prompt_cache_key_sha256\":\"e8bf3c701e17d12d\",\"compat_full_replay_trimmed\":true,\"compat_messages_after_trim\":12}\n"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"=== RUN TestBuildOpenAIModelsURL/v3_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"=== PAUSE TestBuildOpenAIModelsURL/v3_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"=== CONT TestConvertOpenAIModelListToCompleteCodexManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/object_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/object_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"=== RUN TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"=== PAUSE TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"=== CONT TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0984357+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.3-codex\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-5.4\",\"upstream_model\":\"gpt-5.4\",\"stream\":true}\n"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies","Output":"=== RUN TestCombineOpenAIWSReplayItems/new_header_shares_bodies\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies","Output":"--- PASS: TestCombineOpenAIWSReplayItems/new_header_shares_bodies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems/new_header_shares_bodies","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"=== CONT TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-5.4\",\"final_service_tier\":\"\",\"routing_hint_generated\":true,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: upstream identity restored\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"upstream_model\":\"gpt-5.4\",\"compat_identity_restored\":true}\n"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"=== CONT TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"=== CONT TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"=== CONT TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"=== CONT TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-4o\",\"upstream_model\":\"gpt-4o\",\"stream\":true}\n"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_5h_window_zeroes_utilization","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-4o\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/missing_priority_prices_are_backfilled_from_standard","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"=== CONT TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPreservesCompatibleAstraTextOnlyMetadata","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Output":"--- PASS: TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestExtractOpenAICodexProbeUpdatesAccepts429WithCodexHeaders","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"=== CONT TestShouldRefreshOpenAICodexSnapshot\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Output":"--- PASS: TestShouldRefreshOpenAICodexSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"=== CONT TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Output":"--- PASS: TestNormalizeOpenAIWSJSONForCompareOrRaw (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSJSONForCompareOrRaw","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_delta_append","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through","Output":"=== RUN TestValidateOpenAIServiceTierField/priority_passes_through\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Output":"--- PASS: TestOpenAIWSEventShouldParseUsageTerminalEvents (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSEventShouldParseUsageTerminalEvents","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Output":"--- PASS: TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestSanitizeGroupMessagesDispatchFields_ClearsNonOpenAIPlatform","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Output":"--- PASS: TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupIgnoresPersistentlyDisabledMappedAccounts","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Output":"--- PASS: TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAICompatPreviousResponseUnavailableRecognitionIsStrict","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Output":"--- PASS: TestNormalizeOpenAIMessagesDispatchModelConfig (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIMessagesDispatchModelConfig","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through","Output":"--- PASS: TestValidateOpenAIServiceTierField/priority_passes_through (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/priority_passes_through","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Output":"--- PASS: TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ForcedCodexInstructionsTemplatePrependsRenderedInstructions","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_keeps_outbound_tier","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesSyncedMetadataForConvertedModelList","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Output":"--- PASS: TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexManifestSearchCapabilityPreservesUpstreamAndFailsClosed","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Output":"--- PASS: TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestLeavesServiceTiersEmptyForOtherModels","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Output":"--- PASS: TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAIWSPayloadWithoutInputAndPreviousResponseID","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/no_observer_and_no_outbound_tier_stays_nil","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"=== CONT TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"=== RUN TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"=== PAUSE TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Output":"--- PASS: TestCombineOpenAIWSReplayItems (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCombineOpenAIWSReplayItems","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/local_observer_stays_separate_from_outbound_tier","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier","Output":"=== RUN TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier/nil_local_observer_falls_back_to_outbound_tier","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Output":"--- PASS: TestResolvedOpenAIUpstreamServiceTier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolvedOpenAIUpstreamServiceTier","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"=== CONT TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesSyncedAccountMetadata","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestExpandsSelectedModelCoveredByWildcardMapping","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/mark_get_roundtrip_with_merge","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"=== CONT TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestIntersectsTransientlyUnschedulableMappedAccounts","Elapsed":0} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/already_embeddings\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0989925+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/already_embeddings\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/zhipu_v4_coding_base_url","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_multimodal_snapshot_preserves_local_fallback","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"=== CONT TestBuildOpenAIModelsURL/trailing_slash_on_v4\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Output":"--- PASS: TestForwardAsAnthropic_ReusesOAuthCodexTurnState (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_ReusesOAuthCodexTurnState","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"=== RUN TestBuildOpenAIEmbeddingsURL/third-party_versioned_path\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Output":"--- PASS: TestBuildOpenAIModelsURL/trailing_slash_on_v4 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/trailing_slash_on_v4","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/v2_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"=== PAUSE TestBuildOpenAIEmbeddingsURL/third-party_versioned_path\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"=== CONT TestBuildOpenAIModelsURL/host_fallback_uses_v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/openai_v1_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/function_call_output","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/fast","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/custom_tool_call_output","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_xhigh","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/miss_returns_original_header","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"=== RUN TestOpenAIWSInputIsPrefixExtended/invalid_input_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"=== PAUSE TestOpenAIWSInputIsPrefixExtended/invalid_input_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems/rewrites_hit_items_and_shares_the_rest","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/both_missing_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.098Z\",\"msg\":\"[OpenAI WS Mode][openai_ws_mode=true] invalid_encrypted_lineage_capacity_overflow dropped_digests=10 capacity=512\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_gateway\",\"legacy_printf\":true}\n"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"=== CONT TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/array_prefix_match\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/invalid_input_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_array","Elapsed":0} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"=== CONT TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"} {"Time":"2026-09-12T11:39:33.0995326+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"=== CONT TestApplyOpenAICompatModelNormalization\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw/miss_fast_path_returns_original","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing","Output":"=== RUN TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing","Output":"--- PASS: TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/derives_xhigh_from_model_suffix_when_output_config_missing","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== RUN TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== PAUSE TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Output":"--- PASS: TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestShouldRefreshOpenAICodexSnapshot_SparkShadowIgnoresWSv2","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Output":"--- PASS: TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMergeGroupConfiguredCodexModelsInjectsCurrentGroupAliases","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Output":"--- PASS: TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_TrimsFullReplayOnlyForCodexCompatModels","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_404 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_404","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_405\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_404\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/bare_domain\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Output":"--- PASS: TestConvertOpenAIModelListToCompleteCodexManifest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestConvertOpenAIModelListToCompleteCodexManifest","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_405\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientPreservesProviderMetadata","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/third-party_versioned_path\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/already_embeddings\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/io_eof\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Output":"--- PASS: TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupFallsBackWhenCapabilityLookupFails","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/io_eof\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/gpt-5.5-pro_has_no_mandated_fast_tier","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentFromReplayItems (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentFromReplayItems","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/net_closed\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientFiltersOfficialNonAgentModels","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/net_closed\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesNoneForExplicitNonReasoningMetadata","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/context_canceled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/context_canceled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"=== CONT TestBuildOpenAIEmbeddingsURL/bare_/v1\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_normal_closure\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_normal_closure\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentRaw (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentRaw","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_going_away\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupCorrectsOfficialAstraStaleModalities","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix","Output":"=== RUN TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_object\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix","Output":"--- PASS: TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/explicit_output_config_wins_over_model_suffix","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_object (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_object","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_going_away\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/expired_binding_not_returned","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched","Output":"=== RUN TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/v2_base_url (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v2_base_url","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"=== CONT TestBuildOpenAIModelsURL/models_url_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"=== CONT TestOpenAIWSRawPayloadHasToolCallOutput/object_input\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/mcp_tool_call_output","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_no_status\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/tool_search_output","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_no_status\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive","Output":"=== RUN TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive","Output":"--- PASS: TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/case_and_whitespace_insensitive","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities/explicit_text-only_snapshot_narrows_local_fallback","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/non_tool_output","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupPrefersSyncedOpenAIImageCapabilities","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/no_hit_no_change","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/only_strips_matching_items","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios/unrelated_models_untouched","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Output":"--- PASS: TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyModelSpecificPricingPolicy_EnforcesOpenAIFastRatios","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Output":"--- PASS: TestBuildOpenAIModelsURL/host_fallback_uses_v1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/host_fallback_uses_v1","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/openai_v1_base_url (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/openai_v1_base_url","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Output":"--- PASS: TestBuildOpenAIModelsURL/models_url_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/models_url_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/ws_policy_violation\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"=== CONT TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientUsesCurrentSnapshotForCachedNativeManifest","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/input_string_treated_as_single_item","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems/compaction_removed_entirely","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/both_missing_input (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/both_missing_input","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Output":"--- PASS: TestStripOpenAIInvalidEncryptedContentItems (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStripOpenAIInvalidEncryptedContentItems","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_shorter_than_previous","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_mismatch","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_non_empty_array","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_has_input_current_missing","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_filters_orphan_historical_custom_tool_call","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/array_prefix_match (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/array_prefix_match","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/current_invalid_input_json","Elapsed":0} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"=== CONT TestBuildOpenAIModelsURL/v3_base_url\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/server_error\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited"} {"Time":"2026-09-12T11:39:33.1000384+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/rate_limited\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_403\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/api_key_400\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"=== CONT TestIsRetryableCodexModelsManifestStatus/oauth_401\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"=== CONT TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/invalid_input_json (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/invalid_input_json","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/active_5h_window_keeps_utilization","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended/previous_missing_current_empty_array","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Output":"--- PASS: TestOpenAIWSInputIsPrefixExtended (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSInputIsPrefixExtended","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Output":"=== RUN TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Output":"--- PASS: TestBuildOpenAIModelsURL/v3_base_url (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL/v3_base_url","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow/expired_7d_window_zeroes_utilization","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/bare_domain (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_domain","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Output":"--- PASS: TestBuildOpenAIModelsURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIModelsURL","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/third-party_versioned_path (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/third-party_versioned_path","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched","Output":"=== RUN TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/already_embeddings (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/already_embeddings","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL/bare_/v1 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL/bare_/v1","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched","Output":"--- PASS: TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization/non_openai_model_is_untouched","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Output":"--- PASS: TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexUsageProgressFromExtra_ZerosExpiredWindow","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_string\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage/per_session_capacity_degrades_gracefully","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_function_call","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Output":"--- PASS: TestBuildOpenAIEmbeddingsURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIEmbeddingsURL","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Output":"--- PASS: TestApplyOpenAICompatModelNormalization (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyOpenAICompatModelNormalization","Elapsed":0} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through","Output":"=== RUN TestValidateOpenAIServiceTierField/official_tiers_pass_through\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"=== CONT TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1005633+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through","Output":"--- PASS: TestValidateOpenAIServiceTierField/official_tiers_pass_through (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/official_tiers_pass_through","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Output":"--- PASS: TestOpenAIWSStateStoreInvalidEncryptedContentLineage (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSStateStoreInvalidEncryptedContentLineage","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.100Z\",\"msg\":\"openai messages: model mapping applied\",\"service\":\"sub2api\",\"env\":\"test\",\"account_id\":1,\"original_model\":\"claude-sonnet-4-5\",\"normalized_model\":\"claude-sonnet-4-5\",\"billing_model\":\"gpt-4o\",\"upstream_model\":\"gpt-4o\",\"stream\":true}\n"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Output":"=== RUN TestValidateOpenAIServiceTierField/invalid_tier_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Output":"{\"level\":\"DEBUG\",\"time\":\"2026-09-12T03:39:33.100Z\",\"msg\":\"openai routing decision\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.openai_routing\",\"transport\":\"http\",\"account_id\":1,\"final_model\":\"gpt-4o\",\"final_service_tier\":\"\",\"routing_hint_generated\":false,\"ws_affinity_decision\":\"not_applicable\"}\n"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== RUN TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_paired_historical_custom_tool_call","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Output":"--- PASS: TestValidateOpenAIServiceTierField/invalid_tier_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/invalid_tier_rejected","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/ws_policy_violation\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid","Output":"=== RUN TestValidateOpenAIServiceTierField/omitted_field_stays_valid\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Output":"--- PASS: TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestForwardAsAnthropic_DoesNotAutoDerivePromptCacheKeyForNonCodexModel","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/wrapped_eof_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput/object_input (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput/object_input","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/wrapped_eof_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Output":"--- PASS: TestOpenAIWSRawPayloadHasToolCallOutput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSRawPayloadHasToolCallOutput","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"=== CONT TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/windows_connection_reset\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_transfers_current_items_ownership","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/windows_connection_reset\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/priority_alias","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Output":"--- PASS: TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCompleteAPIKeyCodexModelsManifestForClientMarksOnlyOfficialVisionGPTImageInput","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/no_tier_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_merge_shares_history_bodies","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"=== RUN TestIsOpenAIWSClientDisconnectError/broken_pipe\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"=== PAUSE TestIsOpenAIWSClientDisconnectError/broken_pipe\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items","Output":"=== RUN TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/nil\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_string","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/io_eof\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid","Output":"--- PASS: TestValidateOpenAIServiceTierField/omitted_field_stays_valid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/omitted_field_stays_valid","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics","Output":"=== RUN TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/item_reference_does_not_complete_historical_call","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics","Output":"--- PASS: TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/null_value_keeps_omission_semantics","Elapsed":0} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call"} {"Time":"2026-09-12T11:39:33.1010684+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value","Output":"=== RUN TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value","Output":"--- PASS: TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/explicit_empty_string_rejected_as_invalid_enum_value","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected","Output":"=== RUN TestValidateOpenAIServiceTierField/non-string_service_tier_rejected\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_preserves_current_orphan_custom_tool_call","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace","Output":"=== RUN TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_405 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_405","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected","Output":"--- PASS: TestValidateOpenAIServiceTierField/non-string_service_tier_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_service_tier_rejected","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_401 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_401","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence/previous_response_id_full_input_replace","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated","Output":"=== RUN TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_404 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_404","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Output":"--- PASS: TestBuildOpenAIWSReplayInputSequence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildOpenAIWSReplayInputSequence","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/gpt_reasoning_alias_strips_none","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.4/default_equals_standard","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated","Output":"--- PASS: TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/oversized_unknown_string_is_truncated","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed","Output":"=== RUN TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/codex_max_model_stays_intact","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/fast","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/windows_connection_reset\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged","Output":"=== RUN TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel/non_openai_model_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Output":"--- PASS: TestNormalizeOpenAICompatRequestedModel (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestNormalizeOpenAICompatRequestedModel","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed","Output":"--- PASS: TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField/non-string_large_object/array_is_not_echoed","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/wrapped_eof_message\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Output":"--- PASS: TestValidateOpenAIServiceTierField (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestValidateOpenAIServiceTierField","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_policy_violation\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_no_status\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_going_away\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/ws_normal_closure\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/context_canceled\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/net_closed\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies/build_prefix_hit_transfers_current_items","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_number\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Output":"--- PASS: TestOpenAIWSReplaySequenceSharesBodies (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSReplaySequenceSharesBodies","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_number (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_number","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/native_responses","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_bool\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_bool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_bool","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/chat_bridge","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes/mixed_routes","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_null\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Output":"--- PASS: TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupAdvertisesSearchOnlyForChatBridgeRoutes","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/nil (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/nil","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/io_eof (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/io_eof","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/windows_connection_reset (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/windows_connection_reset","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/connection_reset_by_peer","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_null (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_null","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"=== CONT TestIsOpenAIWSClientDisconnectError/broken_pipe\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== RUN TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/oauth_401 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/oauth_401","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_405 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_405","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/server_error (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/server_error","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/rate_limited (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/rate_limited","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_403 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_403","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus/api_key_400 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus/api_key_400","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/wrapped_eof_message (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/wrapped_eof_message","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Output":"--- PASS: TestIsRetryableCodexModelsManifestStatus (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsRetryableCodexModelsManifestStatus","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json","Output":"=== RUN TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== PAUSE TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pause","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence/input_invalid_array_json","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Output":"--- PASS: TestOpenAIWSExtractNormalizedInputSequence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSExtractNormalizedInputSequence","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/priority_alias","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/no_tier_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.5/default_equals_standard","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/fast","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/priority_alias","Elapsed":0} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged"} {"Time":"2026-09-12T11:39:33.1015989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/no_tier_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-sol/default_equals_standard","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.101Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_policy_violation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_policy_violation","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_abnormal_1006","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_no_status (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_no_status","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_going_away (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_going_away","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/context_canceled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/context_canceled","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/ws_normal_closure (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/ws_normal_closure","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/net_closed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.101Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/net_closed","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/fast","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError/broken_pipe (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.101Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError/broken_pipe","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Output":"--- PASS: TestIsOpenAIWSClientDisconnectError (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestIsOpenAIWSClientDisconnectError","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/priority_alias","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.6","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"cont","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"=== CONT TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/malformed_Grok_host","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/no_tier_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/mixed_official_and_custom_Grok_candidates","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_API_key","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_OpenAI-compatible_host_with_unknown_model","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/DeepSeek_V4","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_4.20_vision_model","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-terra -\u003e gpt-5.6-terra(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_Composer_has_only_Chat_image_bridge","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-terra/default_equals_standard","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/custom_Grok_host","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/fast","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/priority_alias","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_OpenAI_legacy_text_model","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/no_tier_unchanged","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Output":"=== RUN TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Output":"{\"level\":\"INFO\",\"time\":\"2026-09-12T03:39:33.102Z\",\"msg\":\"[Pricing] OpenAI fallback matched gpt-5.6-luna -\u003e gpt-5.6-luna(static)\",\"service\":\"sub2api\",\"env\":\"test\",\"component\":\"service.pricing\"}\n"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/official_Grok_Build_vision_host","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x/gpt-5.6-luna/default_equals_standard","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Output":"--- PASS: TestOpenAIFastBillingMultiplier_2xAnd25x (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIFastBillingMultiplier_2xAnd25x","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities/Grok_3_Mini_is_text_only","Elapsed":0} {"Time":"2026-09-12T11:39:33.1021027+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Output":"--- PASS: TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.1063374+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildCodexModelsManifestForGroupUsesProviderImageCapabilities","Elapsed":0} {"Time":"2026-09-12T11:39:33.1063374+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Output":"--- PASS: TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestBuildGroupConfiguredCodexModelsManifestUsesAdministratorConfiguration","Elapsed":0.01} {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Output":"--- PASS: TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_GetOpenAIUsage_DoesNotPromoteCodexExtraToRateLimit","Elapsed":0.2} {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Output":"--- PASS: TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra (0.20s)\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestAccountUsageService_PersistOpenAICodexProbeSnapshotOnlyUpdatesExtra","Elapsed":0.2} {"Time":"2026-09-12T11:39:33.2990891+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"FAIL\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.3180238+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"FAIL\tgithub.com/Wei-Shaw/sub2api/internal/service\t66.376s\n","OutputType":"frame"} {"Time":"2026-09-12T11:39:33.3180238+08:00","Action":"fail","Package":"github.com/Wei-Shaw/sub2api/internal/service","Elapsed":66.376}