@@ -467,6 +467,67 @@ describe("cached VCS refs", () => {
467467 ) ,
468468 ) ;
469469
470+ it . effect ( "a checkout does not wait behind a picker's local status refresh" , ( ) =>
471+ Effect . scoped (
472+ Effect . gen ( function * ( ) {
473+ const refreshStarted = yield * Deferred . make < void > ( ) ;
474+ const releaseRefresh = yield * Deferred . make < void > ( ) ;
475+ const client = {
476+ [ WS_METHODS . vcsRefreshStatus ] : ( ) =>
477+ Deferred . succeed ( refreshStarted , undefined ) . pipe (
478+ Effect . andThen ( Deferred . await ( releaseRefresh ) ) ,
479+ ) ,
480+ [ WS_METHODS . vcsSwitchRef ] : ( ) => Effect . succeed ( { refName : "feature" } ) ,
481+ } as unknown as WsRpcProtocolClient ;
482+ const supervisor = EnvironmentSupervisor . EnvironmentSupervisor . of ( {
483+ target : TARGET ,
484+ state : yield * SubscriptionRef . make ( CONNECTED_CONNECTION_STATE ) ,
485+ session : yield * SubscriptionRef . make ( Option . some ( session ( client ) ) ) ,
486+ prepared : yield * SubscriptionRef . make ( Option . none < PreparedConnection > ( ) ) ,
487+ connect : Effect . void ,
488+ disconnect : Effect . void ,
489+ retryNow : Effect . void ,
490+ } satisfies EnvironmentSupervisor . EnvironmentSupervisor [ "Service" ] ) ;
491+ const run : EnvironmentRegistry . EnvironmentRegistry [ "Service" ] [ "run" ] = (
492+ _environmentId ,
493+ effect ,
494+ ) => Effect . provideService ( effect , EnvironmentSupervisor . EnvironmentSupervisor , supervisor ) ;
495+ const runtime = Atom . runtime (
496+ Layer . merge (
497+ Layer . succeed (
498+ EnvironmentRegistry . EnvironmentRegistry ,
499+ EnvironmentRegistry . EnvironmentRegistry . of ( {
500+ run,
501+ } as unknown as EnvironmentRegistry . EnvironmentRegistry [ "Service" ] ) ,
502+ ) ,
503+ Layer . succeed ( Persistence . EnvironmentCacheStore , cacheWithRefs ( Option . none ( ) ) ) ,
504+ ) ,
505+ ) ;
506+ const atoms = createVcsEnvironmentAtoms ( runtime ) ;
507+ const registry = yield * Effect . acquireRelease ( Effect . sync ( AtomRegistry . make ) , ( registry ) =>
508+ Effect . sync ( ( ) => registry . dispose ( ) ) ,
509+ ) ;
510+ const target = { environmentId : TARGET . environmentId , input : { cwd : "/repo" } } ;
511+
512+ const refresh = atoms . refreshLocalStatusForPicker . run ( registry , {
513+ ...target ,
514+ input : { cwd : "/repo" , localOnly : true } ,
515+ } ) ;
516+ yield * Deferred . await ( refreshStarted ) ;
517+ const checkout = yield * Effect . promise ( ( ) =>
518+ atoms . switchRef . run ( registry , {
519+ ...target ,
520+ input : { cwd : "/repo" , refName : "feature" } ,
521+ } ) ,
522+ ) ;
523+
524+ expect ( AsyncResult . isSuccess ( checkout ) ) . toBe ( true ) ;
525+ yield * Deferred . succeed ( releaseRefresh , undefined ) ;
526+ expect ( AsyncResult . isSuccess ( yield * Effect . promise ( ( ) => refresh ) ) ) . toBe ( true ) ;
527+ } ) ,
528+ ) ,
529+ ) ;
530+
470531 it . effect ( "suppresses persisted snapshots after an environment-wide clear fails" , ( ) =>
471532 Effect . scoped (
472533 Effect . gen ( function * ( ) {
0 commit comments