From 86c85629c026a2c56c94f317d8fe09725b642f13 Mon Sep 17 00:00:00 2001 From: Felix Martin Date: Mon, 1 Jun 2026 20:18:44 -0400 Subject: [PATCH] Remove /knowledge/path; folded into /settings Co-Authored-By: Claude Opus 4.8 --- internal/web/web.go | 19 ------------------- internal/web/web_test.go | 10 ++++++++-- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/internal/web/web.go b/internal/web/web.go index ed12747..0cde5f0 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -74,7 +74,6 @@ func (s *Server) Router() *gin.Engine { r.POST("/end", s.handleEnd) r.POST("/refocus", s.handleRefocus) r.POST("/ontask", s.handleOnTask) - r.POST("/knowledge/path", s.handleKnowledgePath) r.GET("/settings", s.handleGetSettings) r.POST("/settings", s.handlePostSettings) r.GET("/fs/browse", s.handleBrowse) @@ -149,24 +148,6 @@ func (s *Server) handleCommitment(c *gin.Context) { s.respond(c, err) } -type knowledgePathRequest struct { - Path string `json:"path"` -} - -// handleKnowledgePath repoints the profile file at runtime (session-only). It -// mutates config, not commitment state, so it never returns a transition error; -// it just sets the path, re-loads, and broadcasts the refreshed state. -func (s *Server) handleKnowledgePath(c *gin.Context) { - var req knowledgePathRequest - if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": "invalid json"}) - return - } - s.ctrl.SetKnowledgePath(req.Path) - s.broadcast() - c.Data(http.StatusOK, "application/json", []byte(s.stateJSON())) -} - func (s *Server) handleComplete(c *gin.Context) { s.cancelExpiry() s.respond(c, s.ctrl.Complete()) diff --git a/internal/web/web_test.go b/internal/web/web_test.go index 8aee4e8..e3bbd9c 100644 --- a/internal/web/web_test.go +++ b/internal/web/web_test.go @@ -14,6 +14,7 @@ import ( "antidrift/internal/evidence" "antidrift/internal/knowledge" "antidrift/internal/session" + "antidrift/internal/settings" "antidrift/internal/tasks" "github.com/gin-gonic/gin" @@ -398,12 +399,17 @@ func TestEnforceTogglePutsEnforcedOnTheWire(t *testing.T) { func TestKnowledgePathSelectionReloads(t *testing.T) { s := newTestServer(t) s.ctrl.SetKnowledge(stubSource{profile: knowledge.Profile{Path: "/default"}}) + s.SetSettings(filepath.Join(t.TempDir(), "settings.json"), + settings.Settings{}, func(ss settings.Settings) error { + s.ctrl.SetKnowledgePath(ss.KnowledgePath) + return nil + }) r := s.Router() if w := post(t, r, "/planning", ""); w.Code != http.StatusOK { t.Fatalf("/planning code %d", w.Code) } - if w := post(t, r, "/knowledge/path", `{"path":"/custom/profile.md"}`); w.Code != http.StatusOK { - t.Fatalf("/knowledge/path code %d body %s", w.Code, w.Body.String()) + if w := post(t, r, "/settings", `{"ai_backend":"claude","marvin_cmd":"","knowledge_path":"/custom/profile.md"}`); w.Code != http.StatusOK { + t.Fatalf("/settings code %d body %s", w.Code, w.Body.String()) } deadline := time.Now().Add(2 * time.Second) for time.Now().Before(deadline) {