- fix params lost in RabbitMQ transit by threading them through PublishTask/PublishTaskWithRetry
- fix UpdateTaskErrorInfo not setting status=FAILED on async_task
- fix UpdateAsyncTaskResultWithError silently skipping when no result row exists (UPDATE → upsert)
- sync task failure to async_task_result in updateTaskWithError
- remove taskType from AsyncTaskHandler.Execute interface; rename TaskHandler → AsyncTaskHandler
- replace CompositeHandler with direct factory.GetHandler dispatch via worker.dispatch()
- use constructors (NewXxxHandler) for handler registration instead of zero-value literals
- consolidate TaskType/TaskStatus/UnifiedTaskType into task/types.go; delete types_v2.go
- extract BaseTask/TaskParams into task/base_task.go
- introduce typed traceCtxKey to prevent context key collisions (staticcheck fix)
- inject B3 trace values into c.Request.Context() in StartTrace middleware
so handlers using c.Request.Context() carry trace info
- create startup trace context in main.go, replacing context.TODO()
- propagate HTTP traceID/spanID through TaskQueueMessage into RabbitMQ
worker, linking HTTP request → publish → execution on the same traceID
- fix GORM logger null traceID by binding ctx to AutoMigrate and queries
via db.WithContext(ctx)
- thread ctx through handler factory to fix null traceID in startup logs
- replace per-request RabbitMQ producer with channel-based
PushTaskToRabbitMQ goroutine; restrict Swagger to non-production