@@ -7140,6 +7140,13 @@ it.layer(NodeServices.layer)("server router seam", (it) => {
71407140 pr : null ,
71417141 } ) ,
71427142 ) ;
7143+ const remoteExists = vi . fn (
7144+ ( _ : Parameters < GitVcsDriver . GitVcsDriver [ "Service" ] [ "remoteExists" ] > [ 0 ] ) =>
7145+ Effect . sync ( ( ) => {
7146+ bootstrapGitOperations . push ( "remote-exists" ) ;
7147+ return true ;
7148+ } ) ,
7149+ ) ;
71437150 const fetchRemote = vi . fn (
71447151 ( _ : Parameters < GitVcsDriver . GitVcsDriver [ "Service" ] [ "fetchRemote" ] > [ 0 ] ) =>
71457152 Effect . sync ( ( ) => {
@@ -7187,6 +7194,7 @@ it.layer(NodeServices.layer)("server router seam", (it) => {
71877194 yield * buildAppUnderTest ( {
71887195 layers : {
71897196 gitVcsDriver : {
7197+ remoteExists,
71907198 fetchRemote,
71917199 resolveRemoteTrackingCommit,
71927200 createWorktree,
@@ -7277,6 +7285,7 @@ it.layer(NodeServices.layer)("server router seam", (it) => {
72777285 fallbackRemoteName : "origin" ,
72787286 } ) ;
72797287 assert . deepEqual ( bootstrapGitOperations , [
7288+ "remote-exists" ,
72807289 "fetch" ,
72817290 "resolve-remote-commit" ,
72827291 "create-worktree" ,
@@ -7305,6 +7314,110 @@ it.layer(NodeServices.layer)("server router seam", (it) => {
73057314 } ) . pipe ( Effect . provide ( NodeHttpServer . layerTest ) ) ,
73067315 ) ;
73077316
7317+ it . effect (
7318+ "falls back to the local base branch when startFromOrigin is set but no origin remote exists" ,
7319+ ( ) =>
7320+ Effect . gen ( function * ( ) {
7321+ const dispatchedCommands : Array < OrchestrationCommand > = [ ] ;
7322+ const remoteExists = vi . fn (
7323+ ( _ : Parameters < GitVcsDriver . GitVcsDriver [ "Service" ] [ "remoteExists" ] > [ 0 ] ) =>
7324+ Effect . succeed ( false ) ,
7325+ ) ;
7326+ const fetchRemote = vi . fn (
7327+ ( _ : Parameters < GitVcsDriver . GitVcsDriver [ "Service" ] [ "fetchRemote" ] > [ 0 ] ) => Effect . void ,
7328+ ) ;
7329+ const resolveRemoteTrackingCommit = vi . fn (
7330+ ( _ : Parameters < GitVcsDriver . GitVcsDriver [ "Service" ] [ "resolveRemoteTrackingCommit" ] > [ 0 ] ) =>
7331+ Effect . succeed ( {
7332+ commitSha : "0123456789abcdef0123456789abcdef01234567" ,
7333+ remoteRefName : "origin/main" ,
7334+ } ) ,
7335+ ) ;
7336+ const createWorktree = vi . fn (
7337+ ( _ : Parameters < GitVcsDriver . GitVcsDriver [ "Service" ] [ "createWorktree" ] > [ 0 ] ) =>
7338+ Effect . succeed ( {
7339+ worktree : {
7340+ refName : "t3code/bootstrap-refName" ,
7341+ path : "/tmp/bootstrap-worktree" ,
7342+ } ,
7343+ } ) ,
7344+ ) ;
7345+
7346+ yield * buildAppUnderTest ( {
7347+ layers : {
7348+ gitVcsDriver : {
7349+ remoteExists,
7350+ fetchRemote,
7351+ resolveRemoteTrackingCommit,
7352+ createWorktree,
7353+ } ,
7354+ orchestrationEngine : {
7355+ dispatch : ( command ) =>
7356+ Effect . sync ( ( ) => {
7357+ dispatchedCommands . push ( command ) ;
7358+ return { sequence : dispatchedCommands . length } ;
7359+ } ) ,
7360+ readEvents : ( ) => Stream . empty ,
7361+ } ,
7362+ } ,
7363+ } ) ;
7364+
7365+ const createdAt = "2026-01-01T00:00:00.000Z" ;
7366+ const wsUrl = yield * getWsServerUrl ( "/ws" ) ;
7367+ yield * Effect . scoped (
7368+ withWsRpcClient ( wsUrl , ( client ) =>
7369+ client [ ORCHESTRATION_WS_METHODS . dispatchCommand ] ( {
7370+ type : "thread.turn.start" ,
7371+ commandId : CommandId . make ( "cmd-bootstrap-turn-start-no-origin" ) ,
7372+ threadId : ThreadId . make ( "thread-bootstrap-no-origin" ) ,
7373+ message : {
7374+ messageId : MessageId . make ( "msg-bootstrap-no-origin" ) ,
7375+ role : "user" ,
7376+ text : "hello" ,
7377+ attachments : [ ] ,
7378+ } ,
7379+ modelSelection : defaultModelSelection ,
7380+ runtimeMode : "full-access" ,
7381+ interactionMode : "default" ,
7382+ bootstrap : {
7383+ createThread : {
7384+ projectId : defaultProjectId ,
7385+ title : "Bootstrap Thread" ,
7386+ modelSelection : defaultModelSelection ,
7387+ runtimeMode : "full-access" ,
7388+ interactionMode : "default" ,
7389+ branch : "main" ,
7390+ worktreePath : null ,
7391+ createdAt,
7392+ } ,
7393+ prepareWorktree : {
7394+ projectCwd : "/tmp/project" ,
7395+ baseBranch : "main" ,
7396+ branch : "t3code/bootstrap-refName" ,
7397+ startFromOrigin : true ,
7398+ } ,
7399+ } ,
7400+ createdAt,
7401+ } ) ,
7402+ ) ,
7403+ ) ;
7404+
7405+ assert . deepEqual ( remoteExists . mock . calls [ 0 ] ?. [ 0 ] , {
7406+ cwd : "/tmp/project" ,
7407+ remoteName : "origin" ,
7408+ } ) ;
7409+ assert . equal ( fetchRemote . mock . calls . length , 0 ) ;
7410+ assert . equal ( resolveRemoteTrackingCommit . mock . calls . length , 0 ) ;
7411+ assert . deepEqual ( createWorktree . mock . calls [ 0 ] ?. [ 0 ] , {
7412+ cwd : "/tmp/project" ,
7413+ refName : "main" ,
7414+ newRefName : "t3code/bootstrap-refName" ,
7415+ baseRefName : "main" ,
7416+ path : null ,
7417+ } ) ;
7418+ } ) . pipe ( Effect . provide ( NodeHttpServer . layerTest ) ) ,
7419+ ) ;
7420+
73087421 it . effect ( "records setup-script failures without aborting bootstrap turn start" , ( ) =>
73097422 Effect . gen ( function * ( ) {
73107423 const dispatchedCommands : Array < OrchestrationCommand > = [ ] ;
0 commit comments