From 3aff26f3338c729ad1ac9b4777da4967d78e01a3 Mon Sep 17 00:00:00 2001 From: Benjamin Borbe Date: Mon, 25 May 2026 21:04:38 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(agent):=20rename=20internal=20phase=20"?= =?UTF-8?q?in=5Fprogress"=20=E2=86=92=20domain.TaskPhaseExecution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes dormant phase-lookup bug in claude/gemini/code subagents. agentlib.findPhase uses strict equality, so default:"execution" + NewPhase("in_progress", ...) fails when CLI fires the default. Worked in prod only because the executor always emits explicit PHASE env, but breaks any local CLI invocation that relies on the default. Adopts pr-reviewer's pattern of using the typed domain.TaskPhaseExecution constant for both phase registration and NextPhase strings. Bumps vault-cli from v0.64.3 to v0.67.5 (TaskPhaseExecution added in v0.65.1). --- agent/claude/go.mod | 6 ++++-- agent/claude/go.sum | 4 ++-- agent/claude/pkg/factory/factory.go | 3 ++- agent/code/go.mod | 6 ++++-- agent/code/go.sum | 4 ++-- agent/code/pkg/factory/factory.go | 3 ++- agent/code/pkg/steps/steps.go | 3 ++- agent/gemini/go.mod | 6 ++++-- agent/gemini/go.sum | 4 ++-- agent/gemini/pkg/factory/factory.go | 10 ++++++++-- 10 files changed, 32 insertions(+), 17 deletions(-) diff --git a/agent/claude/go.mod b/agent/claude/go.mod index 1357dd0..2852035 100644 --- a/agent/claude/go.mod +++ b/agent/claude/go.mod @@ -2,7 +2,9 @@ module github.com/bborbe/agent/agent/claude go 1.26.3 -replace github.com/bborbe/agent/lib => ../../lib +replace ( + github.com/bborbe/agent/lib => ../../lib +) require ( github.com/bborbe/agent/lib v0.62.3 @@ -12,7 +14,7 @@ require ( github.com/bborbe/sentry v1.9.17 github.com/bborbe/service v1.10.0 github.com/bborbe/time v1.27.0 - github.com/bborbe/vault-cli v0.64.3 + github.com/bborbe/vault-cli v0.67.5 github.com/golang/glog v1.2.5 github.com/onsi/ginkgo/v2 v2.29.0 github.com/onsi/gomega v1.41.0 diff --git a/agent/claude/go.sum b/agent/claude/go.sum index 6b298d6..cc87a54 100644 --- a/agent/claude/go.sum +++ b/agent/claude/go.sum @@ -42,8 +42,8 @@ github.com/bborbe/time v1.27.0 h1:8iP02hL/c/DSx0VSUucl+Xag1DN/Gw6ktykTSf0t9/s= github.com/bborbe/time v1.27.0/go.mod h1:86k09AnUTL/ZifJH/kM3Cks3F15qpguuoCyiTujeyTk= github.com/bborbe/validation v1.4.13 h1:wpbMgKT6qcyzwZ8iIE2CTp+JDHwZ/9kSvZV5gIF5K7I= github.com/bborbe/validation v1.4.13/go.mod h1:fLQ2m4py+juzQeS2vk9BrPztrSH8XxhvPBHGLA/pTmA= -github.com/bborbe/vault-cli v0.64.3 h1:HHN2N6GhBCxdQB8Me++wSPS81fKMLHmJjsyxWf06K7M= -github.com/bborbe/vault-cli v0.64.3/go.mod h1:lrrbavFV9kLuszwnmRmoJusuIbo5brBsPOF+eKZCUVE= +github.com/bborbe/vault-cli v0.67.5 h1:rMVU82q8aUwf8yvz7SwvExWLY7MZEotscM9basaTOMM= +github.com/bborbe/vault-cli v0.67.5/go.mod h1:lrrbavFV9kLuszwnmRmoJusuIbo5brBsPOF+eKZCUVE= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= diff --git a/agent/claude/pkg/factory/factory.go b/agent/claude/pkg/factory/factory.go index 44b0733..82a3329 100644 --- a/agent/claude/pkg/factory/factory.go +++ b/agent/claude/pkg/factory/factory.go @@ -15,6 +15,7 @@ import ( "github.com/bborbe/errors" libkafka "github.com/bborbe/kafka" libtime "github.com/bborbe/time" + "github.com/bborbe/vault-cli/pkg/domain" "github.com/bborbe/agent/agent/claude/pkg/prompts" agentlib "github.com/bborbe/agent/lib" @@ -122,7 +123,7 @@ func CreateAgentFromRunner( }) return agentlib.NewAgent( agentlib.NewPhase("planning", step), - agentlib.NewPhase("in_progress", step), + agentlib.NewPhase(domain.TaskPhaseExecution, step), agentlib.NewPhase("ai_review", step), ) } diff --git a/agent/code/go.mod b/agent/code/go.mod index 77bcda2..ae980bf 100644 --- a/agent/code/go.mod +++ b/agent/code/go.mod @@ -2,7 +2,9 @@ module github.com/bborbe/agent/agent/code go 1.26.3 -replace github.com/bborbe/agent/lib => ../../lib +replace ( + github.com/bborbe/agent/lib => ../../lib +) require ( github.com/bborbe/agent/lib v0.0.0 @@ -12,7 +14,7 @@ require ( github.com/bborbe/sentry v1.9.17 github.com/bborbe/service v1.10.0 github.com/bborbe/time v1.27.0 - github.com/bborbe/vault-cli v0.64.3 + github.com/bborbe/vault-cli v0.67.5 github.com/golang/glog v1.2.5 github.com/onsi/ginkgo/v2 v2.29.0 github.com/onsi/gomega v1.41.0 diff --git a/agent/code/go.sum b/agent/code/go.sum index 6b298d6..cc87a54 100644 --- a/agent/code/go.sum +++ b/agent/code/go.sum @@ -42,8 +42,8 @@ github.com/bborbe/time v1.27.0 h1:8iP02hL/c/DSx0VSUucl+Xag1DN/Gw6ktykTSf0t9/s= github.com/bborbe/time v1.27.0/go.mod h1:86k09AnUTL/ZifJH/kM3Cks3F15qpguuoCyiTujeyTk= github.com/bborbe/validation v1.4.13 h1:wpbMgKT6qcyzwZ8iIE2CTp+JDHwZ/9kSvZV5gIF5K7I= github.com/bborbe/validation v1.4.13/go.mod h1:fLQ2m4py+juzQeS2vk9BrPztrSH8XxhvPBHGLA/pTmA= -github.com/bborbe/vault-cli v0.64.3 h1:HHN2N6GhBCxdQB8Me++wSPS81fKMLHmJjsyxWf06K7M= -github.com/bborbe/vault-cli v0.64.3/go.mod h1:lrrbavFV9kLuszwnmRmoJusuIbo5brBsPOF+eKZCUVE= +github.com/bborbe/vault-cli v0.67.5 h1:rMVU82q8aUwf8yvz7SwvExWLY7MZEotscM9basaTOMM= +github.com/bborbe/vault-cli v0.67.5/go.mod h1:lrrbavFV9kLuszwnmRmoJusuIbo5brBsPOF+eKZCUVE= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= diff --git a/agent/code/pkg/factory/factory.go b/agent/code/pkg/factory/factory.go index ff29524..9596d52 100644 --- a/agent/code/pkg/factory/factory.go +++ b/agent/code/pkg/factory/factory.go @@ -14,6 +14,7 @@ import ( "github.com/bborbe/errors" libkafka "github.com/bborbe/kafka" libtime "github.com/bborbe/time" + "github.com/bborbe/vault-cli/pkg/domain" "github.com/bborbe/agent/agent/code/pkg/steps" agentlib "github.com/bborbe/agent/lib" @@ -71,7 +72,7 @@ func CreateFileResultDeliverer(filePath string) agentlib.ResultDeliverer { func CreateAgent() *agentlib.Agent { return agentlib.NewAgent( agentlib.NewPhase("planning", steps.NewPlanStep()), - agentlib.NewPhase("in_progress", steps.NewExecuteStep()), + agentlib.NewPhase(domain.TaskPhaseExecution, steps.NewExecuteStep()), agentlib.NewPhase("ai_review", steps.NewVerifyStep()), ) } diff --git a/agent/code/pkg/steps/steps.go b/agent/code/pkg/steps/steps.go index 5f6c614..416e891 100644 --- a/agent/code/pkg/steps/steps.go +++ b/agent/code/pkg/steps/steps.go @@ -19,6 +19,7 @@ import ( "fmt" "github.com/bborbe/errors" + "github.com/bborbe/vault-cli/pkg/domain" agentlib "github.com/bborbe/agent/lib" ) @@ -78,7 +79,7 @@ func (s *PlanStep) Run(ctx context.Context, md *agentlib.Markdown) (*agentlib.Re return &agentlib.Result{ Status: agentlib.AgentStatusDone, - NextPhase: "in_progress", + NextPhase: string(domain.TaskPhaseExecution), }, nil } diff --git a/agent/gemini/go.mod b/agent/gemini/go.mod index bfa148a..2f701b1 100644 --- a/agent/gemini/go.mod +++ b/agent/gemini/go.mod @@ -2,7 +2,9 @@ module github.com/bborbe/agent/agent/gemini go 1.26.3 -replace github.com/bborbe/agent/lib => ../../lib +replace ( + github.com/bborbe/agent/lib => ../../lib +) require ( github.com/bborbe/agent/lib v0.0.0 @@ -12,7 +14,7 @@ require ( github.com/bborbe/sentry v1.9.17 github.com/bborbe/service v1.10.0 github.com/bborbe/time v1.27.0 - github.com/bborbe/vault-cli v0.64.3 + github.com/bborbe/vault-cli v0.67.5 github.com/golang/glog v1.2.5 github.com/onsi/ginkgo/v2 v2.29.0 github.com/onsi/gomega v1.41.0 diff --git a/agent/gemini/go.sum b/agent/gemini/go.sum index 3bf86fe..8e88bcc 100644 --- a/agent/gemini/go.sum +++ b/agent/gemini/go.sum @@ -48,8 +48,8 @@ github.com/bborbe/time v1.27.0 h1:8iP02hL/c/DSx0VSUucl+Xag1DN/Gw6ktykTSf0t9/s= github.com/bborbe/time v1.27.0/go.mod h1:86k09AnUTL/ZifJH/kM3Cks3F15qpguuoCyiTujeyTk= github.com/bborbe/validation v1.4.13 h1:wpbMgKT6qcyzwZ8iIE2CTp+JDHwZ/9kSvZV5gIF5K7I= github.com/bborbe/validation v1.4.13/go.mod h1:fLQ2m4py+juzQeS2vk9BrPztrSH8XxhvPBHGLA/pTmA= -github.com/bborbe/vault-cli v0.64.3 h1:HHN2N6GhBCxdQB8Me++wSPS81fKMLHmJjsyxWf06K7M= -github.com/bborbe/vault-cli v0.64.3/go.mod h1:lrrbavFV9kLuszwnmRmoJusuIbo5brBsPOF+eKZCUVE= +github.com/bborbe/vault-cli v0.67.5 h1:rMVU82q8aUwf8yvz7SwvExWLY7MZEotscM9basaTOMM= +github.com/bborbe/vault-cli v0.67.5/go.mod h1:lrrbavFV9kLuszwnmRmoJusuIbo5brBsPOF+eKZCUVE= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= diff --git a/agent/gemini/pkg/factory/factory.go b/agent/gemini/pkg/factory/factory.go index f05d430..4529b41 100644 --- a/agent/gemini/pkg/factory/factory.go +++ b/agent/gemini/pkg/factory/factory.go @@ -15,6 +15,7 @@ import ( "github.com/bborbe/errors" libkafka "github.com/bborbe/kafka" libtime "github.com/bborbe/time" + "github.com/bborbe/vault-cli/pkg/domain" "github.com/bborbe/agent/agent/gemini/pkg/parser" "github.com/bborbe/agent/agent/gemini/pkg/steps" @@ -90,9 +91,14 @@ func CreateAgent(geminiParser agentlib.AIParser) *agentlib.Agent { return agentlib.NewAgent( agentlib.NewPhase( "planning", - agentlib.NewParseStep[steps.Plan]("parse-plan", geminiParser, "## Plan", "in_progress"), + agentlib.NewParseStep[steps.Plan]( + "parse-plan", + geminiParser, + "## Plan", + string(domain.TaskPhaseExecution), + ), ), - agentlib.NewPhase("in_progress", steps.NewExecuteStep()), + agentlib.NewPhase(domain.TaskPhaseExecution, steps.NewExecuteStep()), agentlib.NewPhase("ai_review", steps.NewVerifyStep()), ) } From 59056564509c1cfc36a328083a4462c152cc0c55 Mon Sep 17 00:00:00 2001 From: Benjamin Borbe Date: Mon, 25 May 2026 21:27:39 +0200 Subject: [PATCH 2/2] fix(code): use errors.Wrap instead of errors.Wrapf without format args MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pre-existing major findings from pr-reviewer-agent verdict on PR #4 — errors.Wrapf was called without format specifiers in all three Run methods. Functionally equivalent to errors.Wrap; using the correct constructor keeps the lint clean and matches the rest of the codebase. --- agent/code/pkg/steps/steps.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/code/pkg/steps/steps.go b/agent/code/pkg/steps/steps.go index 416e891..9b09c93 100644 --- a/agent/code/pkg/steps/steps.go +++ b/agent/code/pkg/steps/steps.go @@ -73,7 +73,7 @@ func (s *PlanStep) Run(ctx context.Context, md *agentlib.Markdown) (*agentlib.Re plan := Plan{Operation: op, A: a, B: b} section, err := agentlib.MarshalSectionTyped(ctx, "## Plan", plan) if err != nil { - return nil, errors.Wrapf(ctx, err, "marshal plan") + return nil, errors.Wrap(ctx, err, "marshal plan") } md.ReplaceSection(section) @@ -113,7 +113,7 @@ func (s *ExecuteStep) Run(ctx context.Context, md *agentlib.Markdown) (*agentlib result := Result{Operation: plan.Operation, Value: value} section, err := agentlib.MarshalSectionTyped(ctx, "## Result", result) if err != nil { - return nil, errors.Wrapf(ctx, err, "marshal result") + return nil, errors.Wrap(ctx, err, "marshal result") } md.ReplaceSection(section) @@ -164,7 +164,7 @@ func (s *VerifyStep) Run(ctx context.Context, md *agentlib.Markdown) (*agentlib. section, err := agentlib.MarshalSectionTyped(ctx, "## Review", review) if err != nil { - return nil, errors.Wrapf(ctx, err, "marshal review") + return nil, errors.Wrap(ctx, err, "marshal review") } md.ReplaceSection(section)