@@ -789,6 +789,9 @@ impl AppCore {
789789 }
790790 routes. retain ( |route| route. id != route_id) ;
791791 let mut settings = self . settings ( ) ?;
792+ if settings. route_scope == RouteScope :: Allowlist && routes. is_empty ( ) {
793+ settings. acceleration_enabled = false ;
794+ }
792795 let pairs = self . node_pairs ( ) ?;
793796 self . write_configuration ( & mut settings, & pairs, & routes) ?;
794797 atomic_write_json ( & self . paths . routes , & routes) ?;
@@ -932,12 +935,22 @@ impl AppCore {
932935
933936 pub fn refresh_registered_configuration ( & self ) -> Result < ( ) , String > {
934937 let _guard = self . lock . lock ( ) ;
935- if !git:: include_registered ( & self . paths . gitconfig ) {
938+ let registered = git:: include_registered ( & self . paths . gitconfig ) ;
939+ let mut settings = self . settings ( ) ?;
940+ let routes = self . routes ( ) ?;
941+ let repaired_empty_allowlist = settings. acceleration_enabled
942+ && settings. route_scope == RouteScope :: Allowlist
943+ && routes. is_empty ( ) ;
944+ if repaired_empty_allowlist {
945+ settings. acceleration_enabled = false ;
946+ }
947+ if !registered {
948+ if repaired_empty_allowlist {
949+ atomic_write_json ( & self . paths . settings , & settings) ?;
950+ }
936951 return Ok ( ( ) ) ;
937952 }
938- let mut settings = self . settings ( ) ?;
939953 let pairs = self . node_pairs ( ) ?;
940- let routes = self . routes ( ) ?;
941954 self . write_configuration ( & mut settings, & pairs, & routes) ?;
942955 atomic_write_json ( & self . paths . settings , & settings)
943956 }
@@ -1366,7 +1379,7 @@ mod tests {
13661379 fn system_catalog_is_encrypted_and_authenticated ( ) {
13671380 let bytes = include_bytes ! ( "../../nodes.enc.json" ) ;
13681381 let urls = parse_system_catalog ( bytes) . unwrap ( ) ;
1369- assert_eq ! ( urls. len ( ) , 18 ) ;
1382+ assert ! ( ! urls. is_empty ( ) ) ;
13701383 assert_eq ! ( urls[ 0 ] , FASTGIT_REWRITE_BASE ) ;
13711384 assert ! ( !String :: from_utf8_lossy( bytes) . contains( "fastgit.cc" ) ) ;
13721385
@@ -1857,20 +1870,22 @@ mod tests {
18571870 . collect:: <Vec <_>>( )
18581871 ) ;
18591872
1860- let node = owner_result
1861- . iter ( )
1862- . find ( |node| matches ! ( node. health. status, NodeStatus :: Available | NodeStatus :: Slow ) )
1863- . expect ( "live integration requires at least one usable system node" ) ;
1864- let node_id = node. node . id . clone ( ) ;
1865- let rewrite_base = node. node . rewrite_base . clone ( ) ;
1866-
18671873 core. add_route ( "openai/codex" ) . unwrap ( ) ;
18681874 let enabled = core. set_acceleration ( true ) . unwrap ( ) ;
18691875 assert ! ( enabled. settings. acceleration_enabled) ;
1870- assert_eq ! (
1871- enabled. settings. current_node_id. as_deref( ) ,
1872- Some ( node_id. as_str( ) )
1873- ) ;
1876+ let node_id = enabled
1877+ . settings
1878+ . current_node_id
1879+ . clone ( )
1880+ . expect ( "live integration requires at least one usable system node" ) ;
1881+ let node = owner_result
1882+ . iter ( )
1883+ . find ( |node| {
1884+ node. node . id == node_id
1885+ && matches ! ( node. health. status, NodeStatus :: Available | NodeStatus :: Slow )
1886+ } )
1887+ . expect ( "automatic selection must use a verified node" ) ;
1888+ let rewrite_base = node. node . rewrite_base . clone ( ) ;
18741889 assert ! ( enabled. environment. include_registered) ;
18751890
18761891 let repository = tempfile:: tempdir ( ) . unwrap ( ) ;
@@ -1910,7 +1925,7 @@ mod tests {
19101925 ) ;
19111926
19121927 drop ( core) ;
1913- let core = AppCore :: new ( root) . unwrap ( ) ;
1928+ let core = AppCore :: new ( root. clone ( ) ) . unwrap ( ) ;
19141929 core. refresh_registered_configuration ( ) . unwrap ( ) ;
19151930 let restarted = core. snapshot ( ) . unwrap ( ) ;
19161931 assert ! ( restarted. settings. acceleration_enabled) ;
@@ -1961,6 +1976,23 @@ mod tests {
19611976 assert ! ( !stored_usage. contains( "secret" ) ) ;
19621977 assert ! ( !stored_usage. contains( "hidden" ) ) ;
19631978
1979+ let route_id = core. snapshot ( ) . unwrap ( ) . routes [ 0 ] . id . clone ( ) ;
1980+ let without_routes = core. delete_route ( & route_id) . unwrap ( ) ;
1981+ assert ! ( without_routes. routes. is_empty( ) ) ;
1982+ assert ! ( !without_routes. settings. acceleration_enabled) ;
1983+ assert_eq ! (
1984+ git( repository. path( ) , & [ "remote" , "get-url" , "origin" ] ) ,
1985+ "https://github.com/openai/codex.git"
1986+ ) ;
1987+
1988+ let mut stale_settings = core. settings ( ) . unwrap ( ) ;
1989+ stale_settings. acceleration_enabled = true ;
1990+ atomic_write_json ( & core. paths . settings , & stale_settings) . unwrap ( ) ;
1991+ drop ( core) ;
1992+ let core = AppCore :: new ( root) . unwrap ( ) ;
1993+ core. refresh_registered_configuration ( ) . unwrap ( ) ;
1994+ assert ! ( !core. snapshot( ) . unwrap( ) . settings. acceleration_enabled) ;
1995+
19641996 let restored = core. restore_git_config ( ) . unwrap ( ) ;
19651997 assert ! ( !restored. settings. acceleration_enabled) ;
19661998 assert_eq ! ( restored. settings. line_mode, LineMode :: Direct ) ;
0 commit comments