@@ -104,16 +104,37 @@ describe('initializeServerTelemetry', () => {
104104 ) ;
105105 } ) ;
106106
107- it ( 'degrades to enabled with no model when config is unreadable' , async ( ) => {
107+ it ( 'stays disabled when the config does not opt in' , async ( ) => {
108+ mocks . loadRuntimeConfigSafe . mockReturnValue ( { config : { } , fileError : undefined } ) ;
109+ const { initializeServerTelemetry } = await import ( '#/cli/telemetry' ) ;
110+ initializeServerTelemetry ( { version : '1.2.3' } ) ;
111+
112+ expect ( mocks . initializeTelemetry ) . toHaveBeenCalledWith (
113+ expect . objectContaining ( { enabled : false } ) ,
114+ ) ;
115+ } ) ;
116+
117+ it ( 'enables only when the config opts in' , async ( ) => {
118+ mocks . loadRuntimeConfigSafe . mockReturnValue ( { config : { telemetry : true } , fileError : undefined } ) ;
119+ const { initializeServerTelemetry } = await import ( '#/cli/telemetry' ) ;
120+ initializeServerTelemetry ( { version : '1.2.3' } ) ;
121+
122+ expect ( mocks . initializeTelemetry ) . toHaveBeenCalledWith (
123+ expect . objectContaining ( { enabled : true } ) ,
124+ ) ;
125+ } ) ;
126+
127+ it ( 'degrades to disabled with no model when config is unreadable' , async ( ) => {
108128 mocks . loadRuntimeConfigSafe . mockReturnValue ( {
109129 config : { } ,
110130 fileError : new Error ( 'bad toml' ) ,
111131 } ) ;
112132 const { initializeServerTelemetry } = await import ( '#/cli/telemetry' ) ;
113133 initializeServerTelemetry ( { version : '1.2.3' } ) ;
114134
135+ // Telemetry is opt-in, so a config we could not read is not consent.
115136 expect ( mocks . initializeTelemetry ) . toHaveBeenCalledWith (
116- expect . objectContaining ( { enabled : true , model : undefined } ) ,
137+ expect . objectContaining ( { enabled : false , model : undefined } ) ,
117138 ) ;
118139 } ) ;
119140} ) ;
0 commit comments