fix(core): /retry чистит postmortem-трассы — на новом прогоне постмортем запускается заново
Some checks failed
CI / test (push) Failing after 1m54s
CI / build-and-package (amd64, linux) (push) Failing after 1m21s
CI / build-and-package (amd64, windows) (push) Successful in 33s

This commit is contained in:
ki.sagidullin
2026-08-24 14:56:39 +05:00
parent 9cb174a5d3
commit ed13386612
3 changed files with 36 additions and 0 deletions

View File

@@ -264,6 +264,26 @@ func TestUpdateTraceOutput(t *testing.T) {
}
}
// TestDeleteTracesByAgent — удаление трасс по агенту (сброс маркера при /retry).
func TestDeleteTracesByAgent(t *testing.T) {
s, ctx := setupTestDB(t)
task := &Task{ChatID: "tg://del", TaskTag: "delete-by-agent"}
id, _ := s.CreateTask(ctx, task)
_, _ = s.AppendTrace(ctx, &Trace{TaskID: id, Agent: "dev"})
_, _ = s.AppendTrace(ctx, &Trace{TaskID: id, Agent: "postmortem"})
_, _ = s.AppendTrace(ctx, &Trace{TaskID: id, Agent: "postmortem"})
if err := s.DeleteTracesByAgent(ctx, id, "postmortem"); err != nil {
t.Fatalf("DeleteTracesByAgent: %v", err)
}
traces, _ := s.GetTraces(ctx, id)
if len(traces) != 1 || traces[0].Agent != "dev" {
t.Fatalf("traces = %d (agent %q), want только dev", len(traces), traces[0].Agent)
}
}
// хелперы для проверки классов ошибок
func IsNotFound(err error) bool {
return errors.Is(err, ErrNotFound)

View File

@@ -107,6 +107,17 @@ func (s *Storage) GetLatestTrace(ctx context.Context, taskID int64, agent string
return tr, nil
}
// DeleteTracesByAgent удаляет все трассы задачи с заданным агентом
// (сброс маркера при /retry N: чистый перезапуск без наследия анализа).
func (s *Storage) DeleteTracesByAgent(ctx context.Context, taskID int64, agent string) error {
_, err := s.db.ExecContext(ctx,
`DELETE FROM traces WHERE task_id=? AND agent=?`, taskID, agent)
if err != nil {
return fmt.Errorf("%w: delete traces agent %s for task %d: %w", ErrDB, agent, taskID, err)
}
return nil
}
// DeleteTrace удаляет трассу. Только для тестов/админки.
func (s *Storage) DeleteTrace(ctx context.Context, id int64) error {
res, err := s.db.ExecContext(ctx, `DELETE FROM traces WHERE id = ?`, id)