diff --git a/internal/app/plan_owner_test.go b/internal/app/plan_owner_test.go index 81e8fef6..8dffc254 100644 --- a/internal/app/plan_owner_test.go +++ b/internal/app/plan_owner_test.go @@ -120,7 +120,11 @@ func TestLiveTaskStarterReplaysIdempotencyKey(t *testing.T) { } func TestTaskGenerateRealPIStopGate(t *testing.T) { - // Real PI + PG + revoke/restart evidence lives in - // TestMultiIntentU8_RealPI_ConfirmGenerate_PG (internal/server). + // Permanent redirect, not a TODO: internal/app has no PG pool / pi-agent runner + // harness, and internal/server already imports internal/app (server.go), so pulling + // internal/server's real-PI+PG fixtures in here would create an import cycle. + // Real PI + PG + revoke/restart evidence for this stop-gate lives in + // TestMultiIntentU8_RealPI_ConfirmGenerate_PG (internal/server), which exercises the + // same LiveTaskStarter path against a live pi-agent runner + isolated PG. t.Skip("redirect: run TestMultiIntentU8_RealPI_ConfirmGenerate_PG with TEST_DATABASE_URL + runner") } diff --git a/internal/server/taskstream_test.go b/internal/server/taskstream_test.go index 5d8772c2..e38a433b 100644 --- a/internal/server/taskstream_test.go +++ b/internal/server/taskstream_test.go @@ -182,59 +182,6 @@ func TestTaskStream_SoftFailure_ClassifiedResumable(t *testing.T) { } } -// TestTaskStream_ResumeInvalidWorkspace_ClassifiedResumable resume 模式: -// work_dir 非空走 ResumeOrModifyWorkspace;目标工作区不存在 → 失败仍归类 resumable -// 且 workspace_id 等于请求的 work_dir(工作区可被修复后继续) -func TestTaskStream_ResumeInvalidWorkspace_ClassifiedResumable(t *testing.T) { - t.Skip("P0 安全整改:客户端 work_dir 续跑入口已移除") - cfg := &config.Config{ - Env: "test", - AgentBackend: "stub", - DataDir: t.TempDir(), - KbDbPort: 5432, - AdminUsername: "admin", - AdminPassword: "admin-test-pass", - AgentTimeout: 10 * time.Second, - } - svc := bizdev.MustNewService(t, cfg) - srv := NewServer(cfg, svc) - - ts := httptest.NewServer(srv.Routes()) - defer ts.Close() - - body, _ := json.Marshal(map[string]any{ - "task_key": "intake", - "project_name": "resume-test", - "backend": "stub", - }) - req, _ := http.NewRequest(http.MethodPost, ts.URL+"/api/v1/tasks/run/stream", bytes.NewReader(body)) - req.Header.Set("Content-Type", "application/json") - req.Header.Set("Authorization", "Bearer "+testBearerToken(t, ts.URL, cfg)) - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Fatalf("post tasks run stream failed: %v", err) - } - defer resp.Body.Close() - - events := readSSEEvents(t, resp) - errEv := findEvent(events, stream.EventError) - if errEv == nil { - t.Fatalf("expected event:error in stream, got %d events", len(events)) - } - if errEv.ErrorInfo == nil { - t.Fatal("error_info is nil") - } - if errEv.ErrorInfo.Class != stream.ErrorClassResumable { - t.Fatalf("class=%q want resumable (upstream=%q)", errEv.ErrorInfo.Class, errEv.ErrorInfo.Upstream) - } - if errEv.ErrorInfo.WorkspaceID == "" { - t.Fatal("workspace_id should be populated for resumable errors") - } - if !hasAction(errEv.ErrorInfo.Actions, "continue") || !hasAction(errEv.ErrorInfo.Actions, "restart") { - t.Fatalf("actions=%v want [continue restart]", errEv.ErrorInfo.Actions) - } -} - // TestTaskStream_MaterialsInjection 验证前端传入的 materials(Base64 编码的附件内容) // 能被后端 HTTP handler 正确反序列化,透传给 ExecuteTask,并写入工作区的 materials_text/ 目录 func TestTaskStream_MaterialsInjection(t *testing.T) {