@@ -562,6 +562,7 @@ impl App {
562562 & self ,
563563 routes : & mut Vec < crate :: provider:: ModelRoute > ,
564564 require_credentials : bool ,
565+ require_remote_advertisement : bool ,
565566 ) {
566567 if require_credentials && !crate :: subscription_catalog:: has_credentials ( ) {
567568 return ;
@@ -582,9 +583,11 @@ impl App {
582583 . filter ( |model| {
583584 tier. allows ( model. min_tier )
584585 && !existing. contains ( model. id )
585- && self . remote_available_entries . iter ( ) . any ( |available| {
586- crate :: subscription_catalog:: canonical_model_id ( available) == Some ( model. id )
587- } )
586+ && ( !require_remote_advertisement
587+ || self . remote_available_entries . iter ( ) . any ( |available| {
588+ crate :: subscription_catalog:: canonical_model_id ( available)
589+ == Some ( model. id )
590+ } ) )
588591 } )
589592 {
590593 routes. push ( crate :: provider:: ModelRoute {
@@ -613,10 +616,8 @@ impl App {
613616 name. eq_ignore_ascii_case ( crate :: subscription_catalog:: JCODE_PROVIDER_DISPLAY_NAME )
614617 } ) ;
615618 if provider_is_jcode_subscription {
616- * routes = crate :: provider:: remote_model_routes_fallback (
617- Some ( crate :: subscription_catalog:: JCODE_PROVIDER_DISPLAY_NAME ) ,
618- & self . remote_available_entries ,
619- ) ;
619+ routes. clear ( ) ;
620+ self . append_jcode_subscription_routes ( routes, false , false ) ;
620621 return ;
621622 }
622623 let poisoned_by_jcode_subscription = !routes. is_empty ( )
@@ -634,7 +635,7 @@ impl App {
634635 self . remote_provider_name . as_deref ( ) ,
635636 & self . remote_available_entries ,
636637 ) ;
637- self . append_jcode_subscription_routes ( routes, false ) ;
638+ self . append_jcode_subscription_routes ( routes, false , true ) ;
638639 return ;
639640 }
640641 let mut methods_by_model: std:: collections:: HashMap < & str , HashSet < & str > > =
@@ -694,7 +695,10 @@ impl App {
694695 // Detailed provider hydration describes ordinary configured routes. A
695696 // signed-in Jcode subscriber still needs the managed route for each
696697 // entitled curated model alongside those Anthropic/OpenAI/etc. rows.
697- self . append_jcode_subscription_routes ( routes, true ) ;
698+ // The curated client catalog is versioned with the backend and is the
699+ // authority for managed subscription entitlements. Do not hide newly
700+ // launched subscription models behind a stale remote names snapshot.
701+ self . append_jcode_subscription_routes ( routes, true , false ) ;
698702 }
699703
700704 fn hydrate_remote_model_catalog_snapshot (
0 commit comments