summaryrefslogtreecommitdiff
path: root/internal/api/server.go
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-04-04 09:30:13 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-04-04 09:30:13 +0000
commit940a5bab031bfe81cea9c90d64e6ebc804c366f9 (patch)
tree34f41c4675f0e238c5acd9665790d256ea39a041 /internal/api/server.go
parent2917c580ae3eab093e9e655ccdf210030b7b9d1f (diff)
feat: story ship gate — explicit POST /api/stories/{id}/ship; remove auto-deploy
- checkStoryCompletion now guards against re-running on already-SHIPPABLE stories and no longer auto-triggers triggerStoryDeploy on completion - New Pool.ShipStory method validates SHIPPABLE state then fires triggerStoryDeploy - POST /api/stories/{id}/ship route registered and handleShipStory handler added - Two new tests: 202 for SHIPPABLE story, 409 for non-SHIPPABLE story Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/api/server.go')
-rw-r--r--internal/api/server.go1
1 files changed, 1 insertions, 0 deletions
diff --git a/internal/api/server.go b/internal/api/server.go
index aec1439..3bc4147 100644
--- a/internal/api/server.go
+++ b/internal/api/server.go
@@ -149,6 +149,7 @@ func (s *Server) routes() {
s.mux.HandleFunc("GET /api/stories/{id}/tasks", s.handleListStoryTasks)
s.mux.HandleFunc("POST /api/stories/{id}/tasks", s.handleAddTaskToStory)
s.mux.HandleFunc("PUT /api/stories/{id}/status", s.handleUpdateStoryStatus)
+ s.mux.HandleFunc("POST /api/stories/{id}/ship", s.handleShipStory)
s.mux.HandleFunc("GET /api/stories/{id}/deployment-status", s.handleStoryDeploymentStatus)
s.mux.HandleFunc("GET /api/health", s.handleHealth)
s.mux.HandleFunc("GET /api/version", s.handleVersion)