// 一次性幂等回填:run_1789111889557885000 / 消息 25548 / doc_proj56_intake // // 用法(dev 环境,需 Postgres 可达): // go run ./scripts/backfill_task_run_projection.go // //go:build ignore package main import ( "context" "fmt" "log" "os" "chat-agent-system/internal/bizdev" "chat-agent-system/internal/config" "chat-agent-system/internal/docgov" "chat-agent-system/internal/server" "chat-agent-system/internal/squad" "chat-agent-system/internal/taskrun" ) const ( runID = "run_1789111889557885000" messageID = int64(25548) docID = "doc_proj56_intake" expectedSHA256 = "5329861dadd23ea48baff7079a98fa56e1a1e32a0cf5deda2ca291e57902b94c" artifactTitle = "用户初始需求收集表" workDir = "data/dev/workspaces/bizdev/intake_1789111889595658000" ) func main() { cfg, err := config.Load("") if err != nil { log.Fatal(err) } svc, err := bizdev.NewService(cfg) if err != nil { fmt.Fprintf(os.Stderr, "NewService: %v\n", err) os.Exit(1) } srv := server.NewServer(cfg, svc) ctx := context.Background() pwSvc := bizdev.Snapshot(svc).PW if pwSvc == nil { log.Fatal("project workflow service unavailable") } record := &taskrun.RunRecord{ RunID: runID, SessionID: "sess-p56-u3", ProjectID: 56, TaskKey: "intake", AssistantMsgID: messageID, WorkspaceID: workDir, } result := &bizdev.TaskRunResult{ Success: true, ArtifactTitle: artifactTitle, WorkDir: workDir, TaskKey: "intake", QualityReport: &squad.QualityReport{ Passed: false, Score: 40, Violations: []string{"不做展开", "篇幅有限", "从略"}, }, DocRecord: &docgov.DocumentRecord{ DocID: docID, ContentSHA256: expectedSHA256, WorkDir: workDir, }, } status, finErr := srv.FinalizeTaskRunProjection(ctx, record, result) if finErr != nil { log.Fatalf("finalize failed: %v", finErr) } fmt.Printf("backfill complete: status=%s run_id=%s message_id=%d doc_id=%s sha=%s\n", status, runID, messageID, docID, expectedSHA256) os.Exit(0) }