@@ -649,7 +649,7 @@ func TestAdoptPRSkipGemini(t *testing.T) {
649649
650650func TestAdoptPRFormulaRetriesTransientReviewerStep (t * testing.T ) {
651651 cityDir := setupReviewFormulaCity (t , "success" , map [string ]string {
652- "GC_GRAPH_TRANSIENT_ONCE_SUFFIXES" : "review-pipeline.review-codex.run .1" ,
652+ "GC_GRAPH_TRANSIENT_ONCE_SUFFIXES" : "review-loop.iteration.1.review- pipeline.review-codex.attempt .1" ,
653653 })
654654 _ , workflowID := startReviewWorkflow (t , cityDir , "mol-adopt-pr-v2" , map [string ]string {
655655 "issue" : "" ,
@@ -665,19 +665,19 @@ func TestAdoptPRFormulaRetriesTransientReviewerStep(t *testing.T) {
665665 }
666666
667667 steps := listWorkflowSteps (t , cityDir , workflowID )
668- if ! hasStepWithSuffix (steps , "review-pipeline.review-codex.run .2" ) {
668+ if ! hasStepWithSuffix (steps , "review-pipeline.review-codex.attempt .2" ) {
669669 t .Fatalf ("missing retry attempt for codex reviewer; got: %v" , steps )
670670 }
671671
672- logical := mustFindWorkflowBeadByRefSuffix (t , cityDir , workflowID , "review-pipeline.review-codex" )
672+ logical := mustFindWorkflowBeadByRefSuffix (t , cityDir , workflowID , "review-loop.iteration.1.review- pipeline.review-codex" )
673673 if got := metaValue (logical , "gc.outcome" ); got != "pass" {
674674 t .Fatalf ("review-codex logical outcome = %q, want pass" , got )
675675 }
676676}
677677
678678func TestAdoptPRFormulaSoftFailsGeminiAfterTransientRetries (t * testing.T ) {
679679 cityDir := setupReviewFormulaCity (t , "success" , map [string ]string {
680- "GC_GRAPH_ALWAYS_TRANSIENT_SUFFIXES" : "review-pipeline.review-gemini.run ." ,
680+ "GC_GRAPH_ALWAYS_TRANSIENT_SUFFIXES" : "review-loop.iteration.1.review- pipeline.review-gemini.attempt ." ,
681681 })
682682 _ , workflowID := startReviewWorkflow (t , cityDir , "mol-adopt-pr-v2" , map [string ]string {
683683 "issue" : "" ,
@@ -694,15 +694,15 @@ func TestAdoptPRFormulaSoftFailsGeminiAfterTransientRetries(t *testing.T) {
694694
695695 steps := listWorkflowSteps (t , cityDir , workflowID )
696696 for _ , suffix := range []string {
697- "review-pipeline.review-gemini.run .2" ,
698- "review-pipeline.review-gemini.run .3" ,
697+ "review-pipeline.review-gemini.attempt .2" ,
698+ "review-pipeline.review-gemini.attempt .3" ,
699699 } {
700700 if ! hasStepWithSuffix (steps , suffix ) {
701701 t .Fatalf ("missing Gemini retry attempt %q; got: %v" , suffix , steps )
702702 }
703703 }
704704
705- logical := mustFindWorkflowBeadByRefSuffix (t , cityDir , workflowID , "review-pipeline.review-gemini" )
705+ logical := mustFindWorkflowBeadByRefSuffix (t , cityDir , workflowID , "review-loop.iteration.1.review- pipeline.review-gemini" )
706706 if got := metaValue (logical , "gc.outcome" ); got != "pass" {
707707 t .Fatalf ("review-gemini logical outcome = %q, want pass" , got )
708708 }
@@ -810,9 +810,20 @@ func setupReviewFormulaCity(t *testing.T, mode string, extraEnv map[string]strin
810810 }
811811 installReviewFormulaFixtures (t , cityDir )
812812
813- out , err := runGCDoltWithEnv (env , "" , "init" , "--skip-provider-readiness" , "--file" , configPath , cityDir )
814- if err != nil {
815- t .Fatalf ("gc init failed: %v\n output: %s" , err , out )
813+ var (
814+ out string
815+ err error
816+ )
817+ for attempt := 1 ; attempt <= 2 ; attempt ++ {
818+ out , err = runGCDoltWithEnv (env , "" , "init" , "--skip-provider-readiness" , "--file" , configPath , cityDir )
819+ if err == nil {
820+ break
821+ }
822+ if ! isTransientManagedDoltInitFailure (out ) || attempt == 2 {
823+ t .Fatalf ("gc init failed: %v\n output: %s" , err , out )
824+ }
825+ t .Logf ("retrying gc init after transient managed Dolt startup failure (attempt %d/2)" , attempt + 1 )
826+ time .Sleep (time .Duration (attempt ) * time .Second )
816827 }
817828 registerCityCommandEnv (cityDir , env )
818829 t .Cleanup (func () {
@@ -824,6 +835,12 @@ func setupReviewFormulaCity(t *testing.T, mode string, extraEnv map[string]strin
824835 return cityDir
825836}
826837
838+ func isTransientManagedDoltInitFailure (out string ) bool {
839+ msg := strings .ToLower (out )
840+ return strings .Contains (msg , "dolt server exited during startup" ) ||
841+ strings .Contains (msg , "did not become query-ready after 30s" )
842+ }
843+
827844func workflowAgentStartCommand (mode string , extraEnv map [string ]string ) string {
828845 parts := []string {"GC_GRAPH_MODE=" + mode }
829846 if len (extraEnv ) > 0 {
0 commit comments