@@ -55,6 +55,7 @@ import {
5555} from '@utils/debug' ;
5656import { createBenchmarkPipeline } from '@lib/middleware/benchmark' ;
5757import { wizardAbort , WizardError , registerCleanup } from '@utils/wizard-abort' ;
58+ import { isNonInteractiveEnvironment } from '@utils/environment' ;
5859import { formatScanReport , writeScanReport } from '@lib/yara-hooks' ;
5960import { detectNodePackageManagers } from '@lib/detection/package-manager' ;
6061import type { PackageManagerDetector } from '@lib/detection/package-manager' ;
@@ -279,12 +280,17 @@ async function bootstrapProgram(
279280
280281 await getUI ( ) . showBlockingOutage ( readiness ) ;
281282
282- await wizardAbort ( {
283- message :
284- 'Cannot start — external services are down:\n' +
285- blockingLabels . map ( ( l ) => ` - ${ l } ` ) . join ( '\n' ) +
286- '\n\nPlease try again later.' ,
287- } ) ;
283+ // The TUI lets the user continue past an outage; non-interactive runs
284+ // (CI) do the same automatically — the degraded services are reported
285+ // above, but we proceed rather than aborting on a transient upstream blip.
286+ if ( ! isNonInteractiveEnvironment ( ) ) {
287+ await wizardAbort ( {
288+ message :
289+ 'Cannot start — external services are down:\n' +
290+ blockingLabels . map ( ( l ) => ` - ${ l } ` ) . join ( '\n' ) +
291+ '\n\nPlease try again later.' ,
292+ } ) ;
293+ }
288294 } else if ( readiness . decision === WizardReadiness . YesWithWarnings ) {
289295 getUI ( ) . setReadinessWarnings ( readiness ) ;
290296 }
0 commit comments