Merge branch 'dev' into canary

This commit is contained in:
2026-07-08 23:09:21 -07:00
2 changed files with 13 additions and 0 deletions
@@ -174,6 +174,13 @@ final class IncrementalTranscriptProjection {
case .toolCallInputDelta(let d): return [d.toolCallID]
case .toolResult(let r): return [r.toolCallID]
case .fileChange(let f): return f.toolCallID.map { [$0] } ?? []
case .note(let note):
// A note tagged with the edit it brackets (a subagent's lock-acquire / nvrsion-land)
// is now part of that edit's scope: chain it to the edit's id so a seal seam can't
// separate them. If the edit was already sealed (a rare late note after its scope
// closed), the tail reference to a sealed id trips the self-healing reset — a whole
// re-fold that necessarily matches `build`. Untagged notes chain to nothing, as before.
return note.toolCallID.map { [$0] } ?? []
default: return []
}
}
@@ -347,6 +347,12 @@ enum TranscriptProjection {
return change.toolCallID.flatMap { parentOf[$0] }
case .assistantText(let chunk), .thinking(let chunk):
return chunk.parentToolCallID
case .note(let note):
// A lock/nvrsion note tagged with the edit it brackets inherits that edit's subagent
// scope — like a `.toolResult`/`.fileChange` — so a subagent's lock-acquire or
// nvrsion-land note nests in its card instead of leaking to the main transcript. An
// untagged note (a turn-end release, a user git note) has no owner.
return note.toolCallID.flatMap { parentOf[$0] }
default:
return nil
}