From e6c81dd5b324d49b0a1617765b10d1c8e61d2da7 Mon Sep 17 00:00:00 2001 From: ZanzyTHEbar Date: Thu, 19 Feb 2026 15:48:14 +0000 Subject: [PATCH] fix(agent): propagate errors in conversation store operations - ForkFromCheckpoint: validate snapshot JSON instead of silently discarding unmarshal errors - Graph: propagate recursive visit() errors instead of swallowing them - Fix import ordering for jsonv2 --- pkg/agent/conversations/store.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/agent/conversations/store.go b/pkg/agent/conversations/store.go index 550740f95..75a5d7cd1 100644 --- a/pkg/agent/conversations/store.go +++ b/pkg/agent/conversations/store.go @@ -5,9 +5,10 @@ package conversations import ( "context" - jsonv2 "github.com/go-json-experiment/json" "strings" + jsonv2 "github.com/go-json-experiment/json" + "github.com/sipeed/picoclaw/pkg/ids" sqlc "github.com/sipeed/picoclaw/pkg/memory/sqlc" "github.com/sipeed/picoclaw/pkg/pcerrors" @@ -174,7 +175,11 @@ func (s *Store) ForkFromCheckpoint(ctx context.Context, p ForkFromCheckpointPara Messages []msgSnapshot `json:"messages"` } var snap snapshot - _ = jsonv2.Unmarshal([]byte(runState.SnapshotJson), &snap) + if len(runState.SnapshotJson) > 0 { + if err := jsonv2.Unmarshal(runState.SnapshotJson, &snap); err != nil { + return sqlc.AgentConversation{}, pcerrors.Wrapf(pcerrors.CodeInternal, err, "parse snapshot for run state %s", cp.RunStateID) + } + } conv, err := s.q.CreateAgentConversation(ctx, sqlc.CreateAgentConversationParams{ ID: ids.New(), @@ -518,7 +523,9 @@ func (s *Store) Graph(ctx context.Context, p GraphParams) (GraphResult, error) { Type: "fork", From: from, To: to, CheckpointID: &cpID, } if remaining > 0 { - _ = visit(fp.ParentConversationID, remaining-1) + if err := visit(fp.ParentConversationID, remaining-1); err != nil { + return err + } } } @@ -533,7 +540,9 @@ func (s *Store) Graph(ctx context.Context, p GraphParams) (GraphResult, error) { Type: "fork", From: from, To: to, CheckpointID: &cpID, } if remaining > 0 { - _ = visit(c.ChildConversationID, remaining-1) + if err := visit(c.ChildConversationID, remaining-1); err != nil { + return err + } } } }