1
00:00:00,263 --> 00:00:00,958
Welcome to the show.

2
00:00:01,158 --> 00:00:07,519
James, May 4th, 2026 -- Claude Code
v2.1.128

3
00:00:07,599 --> 00:00:13,034
ships, and buried in the notes is one of
those little Git lines that can absolutely

4
00:00:13,098 --> 00:00:14,394
make your stomach drop.

5
00:00:14,594 --> 00:00:18,392
`EnterWorktree` used to branch from
`origin/<default-branch>`.

6
00:00:18,552 --> 00:00:21,591
Now it branches from your local `HEAD`.

7
00:00:21,658 --> 00:00:26,867
Which means before this fix, if you had
unpushed commits sitting locally,

8
00:00:26,887 --> 00:00:29,584
the new worktree could quietly ignore
them.

9
00:00:31,199 --> 00:00:35,648
Wait -- `origin/<default-branch>` versus
local `HEAD` is not a tiny distinction.

10
00:00:35,760 --> 00:00:40,685
That's the difference between "branch from
what I ACTUALLY have on my machine" and

11
00:00:40,845 --> 00:00:43,561
"branch from whatever I last shoved up to
remote."

12
00:00:43,748 --> 00:00:48,207
If I've got a WIP commit locally, that
agent is basically starting from yesterday's

13
00:00:48,303 --> 00:00:48,767
news.

14
00:00:49,000 --> 00:00:49,962
Exactly.

15
00:00:50,082 --> 00:00:51,561
And that's the sneaky bit.

16
00:00:51,701 --> 00:00:53,321
The worktree looked normal.

17
00:00:53,401 --> 00:00:55,240
Nothing was obviously on fire.

18
00:00:55,373 --> 00:00:58,597
No big red warning, no busted checkout.

19
00:00:58,677 --> 00:01:03,244
But unless you were the sort of maniac --
and I say that lovingly as a web dev who's

20
00:01:03,276 --> 00:01:08,192
done this in a panic at midnight -- unless
you checked `git log` in both places,

21
00:01:08,252 --> 00:01:12,996
you'd have no clue your fresh agent branch
was based on stale remote state.

22
00:01:14,272 --> 00:01:17,281
And that is the WORST category of bug.

23
00:01:17,461 --> 00:01:18,719
Not a crash.

24
00:01:18,799 --> 00:01:20,319
Not a loud failure.

25
00:01:20,559 --> 00:01:21,519
A liar.

26
00:01:21,619 --> 00:01:26,629
Because if the branch opens fine, files
are there, everything feels clean...

27
00:01:26,669 --> 00:01:27,592
you trust it.

28
00:01:27,720 --> 00:01:31,671
Then twenty minutes later you're asking,
"Why doesn't the code match?"

29
00:01:31,771 --> 00:01:36,235
and the answer is: because the base was
wrong before you even started.

30
00:01:37,205 --> 00:01:37,401
Yep.

31
00:01:37,454 --> 00:01:40,520
Multi-agent workflows lean on worktrees
for isolation.

32
00:01:40,536 --> 00:01:41,640
That's the whole bargain, right?

33
00:01:41,800 --> 00:01:46,043
One agent here, another over there,
everyone's got their own little fenced paddock.

34
00:01:46,183 --> 00:01:50,204
But if those paddocks start from different
realities -- one from local truth,

35
00:01:50,244 --> 00:01:54,688
one from stale remote truth -- you're not
isolating work, you're splitting reality.

36
00:01:54,757 --> 00:01:56,051
Proper dog's breakfast.

37
00:01:57,000 --> 00:01:59,521
"Splitting reality" is good.

38
00:02:00,061 --> 00:02:03,563
[short pause] Because in practice it's not
just one missing commit.

39
00:02:03,723 --> 00:02:05,166
It's interpretation drift.

40
00:02:05,313 --> 00:02:07,726
Agent A sees the local fix you made.

41
00:02:07,846 --> 00:02:11,404
Agent B, launched through the buggy path,
doesn't.

42
00:02:11,584 --> 00:02:16,362
Now they generate different edits,
different assumptions, maybe even different bug

43
00:02:16,442 --> 00:02:17,082
reports.

44
00:02:17,242 --> 00:02:20,366
And none of that LOOKS like a Git-base
problem at first.

45
00:02:21,000 --> 00:02:24,280
Right, and from the dev side, that's the
gut-punch.

46
00:02:24,480 --> 00:02:27,554
You trust a tool to just do the sensible
thing.

47
00:02:27,649 --> 00:02:31,801
Especially with worktrees, because they're
meant to be the tidy option.

48
00:02:31,961 --> 00:02:37,009
Then later you realize it respected the
docs less than your actual repo state.

49
00:02:37,289 --> 00:02:41,641
[laughs softly] Mate, that's like asking
someone to copy your shopping list and they

50
00:02:41,692 --> 00:02:44,202
faithfully copy last week's receipt
instead.

51
00:02:45,704 --> 00:02:47,639
Last week's receipt is perfect.

52
00:02:47,699 --> 00:02:51,885
And I think the horror lands hardest on
that phrase "silently skipped."

53
00:02:52,072 --> 00:02:56,365
If an unpushed local fix gets silently
skipped, it means the important information

54
00:02:56,445 --> 00:02:57,885
wasn't missing from Git.

55
00:02:57,992 --> 00:02:59,166
It was present.

56
00:02:59,246 --> 00:03:01,565
It was right there in your local `HEAD`.

57
00:03:01,585 --> 00:03:02,924
The wrapper just didn't use it.

58
00:03:04,000 --> 00:03:06,080
And to be fair, now it does.

59
00:03:06,267 --> 00:03:13,045
In v2.1.128, `EnterWorktree` branches from
local `HEAD`, so unpushed commits

60
00:03:13,105 --> 00:03:16,009
are finally included instead of being left
behind.

61
00:03:16,169 --> 00:03:20,575
But I do think this is one of those bugs
that's worth talking about because loads of

62
00:03:20,626 --> 00:03:24,814
developers would've had that weird,
low-grade feeling of "hang on...

63
00:03:24,854 --> 00:03:26,575
why is this branch off?"

64
00:03:26,615 --> 00:03:28,894
without ever catching the exact cause.

65
00:03:29,142 --> 00:03:30,120
Let me try to say it back.

66
00:03:30,257 --> 00:03:35,397
Before May 4th, 2026, if I spawned a
worktree through `EnterWorktree`,

67
00:03:35,437 --> 00:03:39,156
I might THINK I was branching from my
current working reality,

68
00:03:39,176 --> 00:03:41,875
but I was actually branching from
`origin/<default-branch>`.

69
00:03:41,928 --> 00:03:46,111
So if I hadn't pushed, the agent missed my
latest local commits.

70
00:03:46,204 --> 00:03:52,348
After v2.1.128, it finally branches from
local `HEAD`, which is what most developers

71
00:03:52,375 --> 00:03:53,788
would've assumed in the first place.

72
00:03:54,268 --> 00:03:54,801
That's it.

73
00:03:55,041 --> 00:04:00,798
Not a new superpower -- more like the
floorboards have been screwed down properly.

74
00:04:01,118 --> 00:04:06,554
And if you've ever nearly tanked a site
with one bad assumption -- I have,

75
00:04:06,634 --> 00:04:12,310
long story, awful midnight deploy -- you
get very twitchy around tools that fail

76
00:04:12,400 --> 00:04:13,110
quietly.

77
00:04:13,377 --> 00:04:17,353
Quiet bugs are the ones that make you
doubt your own memory.

78
00:04:18,000 --> 00:04:24,000
So the key framing here is: this is less a
feature change than a correctness repair.

79
00:04:24,020 --> 00:04:26,000
The documented behavior is restored.

80
00:04:26,213 --> 00:04:31,281
If you WANT remote-state branching now,
you need to push first or pick a different

81
00:04:31,345 --> 00:04:32,476
base explicitly.

82
00:04:32,556 --> 00:04:37,439
That's a very different mental model from
"the tool will secretly choose remote for

83
00:04:37,492 --> 00:04:37,757
me."

84
00:04:38,000 --> 00:04:40,081
[questioning tone] And that's an important
distinction, hey,

85
00:04:40,121 --> 00:04:44,716
because plain `git worktree add` still
behaves like standard Git.

86
00:04:44,929 --> 00:04:47,517
So the bug wasn't Git being weird.

87
00:04:47,597 --> 00:04:52,711
It was Claude Code's internal
`EnterWorktree` wrapper doing something specific in

88
00:04:52,731 --> 00:04:53,910
the agent workflow.

89
00:04:54,000 --> 00:04:57,675
Exactly -- `git worktree add` is standard
Git territory.

90
00:04:57,835 --> 00:05:00,310
`EnterWorktree` is the convenience layer.

91
00:05:00,430 --> 00:05:04,789
And when convenience layers drift from
expected behavior, that's where trust gets

92
00:05:04,853 --> 00:05:05,749
expensive.

93
00:05:05,789 --> 00:05:08,069
Because developers blame themselves first.

94
00:05:08,165 --> 00:05:10,426
They think, "Did I forget a stash?

95
00:05:10,476 --> 00:05:11,901
Did I checkout wrong?

96
00:05:11,921 --> 00:05:13,260
Did I imagine that commit?"

97
00:05:14,135 --> 00:05:16,956
"Have I become a drongo, or is the tool
haunted?"

98
00:05:17,116 --> 00:05:20,395
Those are the two options at 11:47 p.m.

99
00:05:21,519 --> 00:05:22,119
Usually both.

100
00:05:22,319 --> 00:05:25,879
But this release has a broader pattern,
and I like that.

101
00:05:26,019 --> 00:05:29,395
The reliability story isn't only the
worktree fix.

102
00:05:29,462 --> 00:05:32,360
There's also subprocess OTEL isolation.

103
00:05:32,536 --> 00:05:39,399
Bash, hooks, MCP servers, LSP processes --
they stop inheriting `OTEL_*` variables

104
00:05:39,519 --> 00:05:42,677
and accidentally shipping traces to Claude
Code's collector.

105
00:05:43,000 --> 00:06:15,160
`OTEL_*`

106
00:06:15,160 --> 00:06:15,160
is the

107
00:06:15,160 --> 00:08:15,800
memorable

108
00:08:15,807 --> 00:08:16,083
token there for me.

109
00:08:16,098 --> 00:08:19,488
Because environment-variable leakage is
another silent one,

110
00:08:19,541 --> 00:08:20,126
right?

111
00:08:20,246 --> 00:08:21,686
Not dramatic.

112
00:08:21,758 --> 00:08:26,278
Just the wrong subprocess inheriting
tracing config it shouldn't have,

113
00:08:26,318 --> 00:08:29,630
and suddenly telemetry goes somewhere you
never intended.

114
00:08:31,000 --> 00:08:34,765
Yeah, and that phrase "accidentally
shipping traces" matters.

115
00:08:35,858 --> 00:08:38,079
We're not talking about some flashy UI
bug.

116
00:08:38,092 --> 00:08:43,077
We're talking about background processes
-- Bash, hooks, MCP servers,

117
00:08:43,157 --> 00:08:46,521
LSPs -- inheriting state they didn't ask
for.

118
00:08:46,734 --> 00:08:49,564
Isolation is the whole game in toolchains
like this.

119
00:08:49,740 --> 00:08:53,969
Same theme as worktrees, honestly: keep
boundaries real.

120
00:08:55,000 --> 00:08:56,044
That's a nice connection.

121
00:08:56,188 --> 00:08:58,766
Worktree isolation for code state.

122
00:08:59,046 --> 00:09:01,244
OTEL isolation for process state.

123
00:09:01,377 --> 00:09:05,804
In both cases, the fix is basically: stop
the invisible bleed-over.

124
00:09:06,000 --> 00:09:11,209
And then there's the other one I think
agent users will FEEL immediately: the

125
00:09:11,280 --> 00:09:13,208
parallel tool-call fix.

126
00:09:13,345 --> 00:09:17,926
Before, a failing read-only Bash command
like `grep`, `git diff`,

127
00:09:17,979 --> 00:09:20,488
or `ls` could cancel sibling calls.

128
00:09:20,628 --> 00:09:21,927
Now it doesn't.

129
00:09:21,991 --> 00:09:24,651
That is huge for multi-step agent work.

130
00:09:25,146 --> 00:09:28,354
The examples there are so grounded too --
`grep`, `git diff`,

131
00:09:28,434 --> 00:09:28,994
`ls`.

132
00:09:29,090 --> 00:09:31,357
That's not some exotic edge case.

133
00:09:31,413 --> 00:09:33,398
That's bread-and-butter terminal stuff.

134
00:09:33,638 --> 00:09:37,714
If one read-only command hits a dead end
and takes down its siblings,

135
00:09:37,734 --> 00:09:39,874
the workflow feels brittle as.

136
00:09:40,018 --> 00:09:44,429
Like one wheel hits a pothole and the
whole bike decides the ride is over.

137
00:09:45,000 --> 00:09:45,360
Right.

138
00:09:45,370 --> 00:09:49,324
And in agent workflows, parallel calls are
often about exploration.

139
00:09:49,444 --> 00:09:53,805
One command checks files, another diffs
changes, another searches text.

140
00:09:53,965 --> 00:09:58,284
If `grep` fails because the pattern isn't
there, that should be information,

141
00:09:58,324 --> 00:09:59,723
not a global emergency.

142
00:09:59,863 --> 00:10:05,641
The old behavior basically treated "no
result" or "that path's wrong" as a reason to

143
00:10:05,694 --> 00:10:07,476
collapse the whole branch of thought.

144
00:10:08,137 --> 00:10:11,915
Which is very unlike how a good dev
actually works.

145
00:10:12,006 --> 00:10:13,431
Humans poke around.

146
00:10:13,631 --> 00:10:16,470
One command fizzles, we try the next
thing.

147
00:10:16,683 --> 00:10:20,710
We don't throw the laptop into the bin
because `ls` had a sad day.

148
00:10:21,000 --> 00:10:24,840
And that's why these fixes belong together
in one conversation.

149
00:10:25,048 --> 00:10:30,987
Worktree bases, OTEL inheritance,
sibling-call cancellation -- on paper they're

150
00:10:31,031 --> 00:10:31,463
separate.

151
00:10:31,603 --> 00:10:34,903
But the shared theme is reducing silent
interference.

152
00:10:35,031 --> 00:10:36,341
Less hidden state.

153
00:10:36,461 --> 00:10:38,421
Fewer invisible cancellations.

154
00:10:38,541 --> 00:10:42,417
Fewer moments where the tool quietly
nudges reality sideways.

155
00:10:43,160 --> 00:10:44,000
Yeah.

156
00:10:44,130 --> 00:10:47,080
The dream with agent tools isn't magic.

157
00:10:47,187 --> 00:10:48,203
It's trust.

158
00:10:48,550 --> 00:10:52,044
If I branch from here, branch from HERE.

159
00:10:52,284 --> 00:10:55,007
If a subprocess shouldn't inherit
`OTEL_*`, don't leak it.

160
00:10:55,007 --> 00:10:55,007
If `git diff` fails in one lane,

161
00:10:55,007 --> 00:12:42,527
don't

162
00:12:43,647 --> 00:12:48,688
nuke the other

163
00:13:07,551 --> 00:13:09,006
lane.

164
00:13:09,006 --> 00:13:09,006
Basic stuff...

165
00:13:09,006 --> 00:13:14,773
but basic stuff is what keeps your head
straight.

166
00:13:15,067 --> 00:13:19,391
And honestly, that's the takeaway I'd
leave people with: not "learn this one weird

167
00:13:19,471 --> 00:13:23,786
bug," but notice which tools fail loudly
and which ones fail politely.

168
00:13:23,966 --> 00:13:27,145
The polite failures are the ones that
rewrite your assumptions.

169
00:13:27,252 --> 00:13:29,067
Those are the dangerous ones.

170
00:13:30,000 --> 00:13:30,559
Too right.

171
00:13:30,607 --> 00:13:32,082
Push if you want remote truth.

172
00:13:32,162 --> 00:13:33,841
Choose a base if you need one.

173
00:13:33,981 --> 00:13:38,635
But if a wrapper promises isolation, make
sure it's not doing a sneaky little side

174
00:13:38,702 --> 00:13:40,079
quest behind your back.

175
00:13:40,228 --> 00:13:42,162
Cheers, James.

176
00:13:43,000 --> 00:13:43,721
See you next time.

