From 858a9ba1a18c5f2c54b3523cc0431fefa0dfbd77 Mon Sep 17 00:00:00 2001 From: Mathias Bergqvist Date: Sun, 19 Apr 2026 09:42:03 +0200 Subject: [PATCH] fix(exec): expand validPhases and remove schema enum constraint for phase --- internal/exec/result.go | 10 +++++++--- internal/exec/result_test.go | 8 ++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/internal/exec/result.go b/internal/exec/result.go index 79be573..8b2f4dc 100644 --- a/internal/exec/result.go +++ b/internal/exec/result.go @@ -10,7 +10,7 @@ import ( // validates its own output before returning. type Result struct { Status string `json:"status"` // pass | fail | error - Phase string `json:"phase"` // red | green | refactor + Phase string `json:"phase"` // red | green | refactor | retrospective | review | debug | spec | trainer Skill string `json:"skill"` // tdd | review | ... FilePath string `json:"file_path"` // absolute path to generated file RunnerOutput string `json:"runner_output"` // raw stdout+stderr from test runner @@ -25,6 +25,10 @@ var validPhases = map[string]bool{ "green": true, "refactor": true, "retrospective": true, + "review": true, + "debug": true, + "spec": true, + "trainer": true, } func (r Result) Validate() error { @@ -33,7 +37,7 @@ func (r Result) Validate() error { errs = append(errs, "status must be pass|fail|error, got: "+r.Status) } if !validPhases[r.Phase] { - errs = append(errs, "phase must be red|green|refactor, got: "+r.Phase) + errs = append(errs, "phase must be one of red|green|refactor|retrospective|review|debug|spec|trainer, got: "+r.Phase) } if r.Skill == "" { errs = append(errs, "skill is required") @@ -50,7 +54,7 @@ const Schema = `{ "required": ["status","phase","skill","file_path","runner_output","verified","model_used","message"], "properties": { "status": {"type": "string", "enum": ["pass","fail","error"]}, - "phase": {"type": "string", "enum": ["red","green","refactor"]}, + "phase": {"type": "string"}, "skill": {"type": "string"}, "file_path": {"type": "string"}, "runner_output": {"type": "string"}, diff --git a/internal/exec/result_test.go b/internal/exec/result_test.go index 2802e5a..2d94fac 100644 --- a/internal/exec/result_test.go +++ b/internal/exec/result_test.go @@ -69,3 +69,11 @@ func TestResultValidation(t *testing.T) { }) } } + +func TestValidateAcceptsAllPhases(t *testing.T) { + phases := []string{"red", "green", "refactor", "retrospective", "review", "debug", "spec", "trainer"} + for _, phase := range phases { + r := exec.Result{Status: "pass", Phase: phase, Skill: "test", ModelUsed: "self", Message: "ok"} + assert.NoError(t, r.Validate(), "phase %q should be valid", phase) + } +}