Tencent/WeKnora · error
enqueue wiki ingest trigger: task enqueuer is nil
Error message
enqueue wiki ingest trigger: task enqueuer is nil
What it means
This error is returned by the wiki ingest trigger enqueue helper when the task enqueuer dependency is nil at the moment an ingest trigger task needs to be published to asynq. It is a wiring/initialization guard: without an enqueuer the trigger task cannot be scheduled, so the code fails fast with a descriptive message rather than panicking on a nil interface.
Source
Thrown at internal/application/service/wiki_ingest.go:580
ctx context.Context,
task interfaces.TaskEnqueuer,
tenantID uint64,
kbID string,
) error {
lang := types.LanguageFromContextOrDefault(ctx)
trigger := WikiIngestPayload{
TenantID: tenantID,
KnowledgeBaseID: kbID,
Language: lang,
}
langfuse.InjectTracing(ctx, &trigger)
triggerBytes, err := json.Marshal(trigger)
if err != nil {
logger.Warnf(ctx, "wiki ingest: failed to marshal trigger task: %v", err)
return fmt.Errorf("marshal wiki ingest trigger: %w", err)
}
if task == nil {
return errors.New("enqueue wiki ingest trigger: task enqueuer is nil")
}
t := asynq.NewTask(types.TypeWikiIngest, triggerBytes,
asynq.Queue(types.QueueWiki),
asynq.MaxRetry(wikiIngestMaxRetry),
asynq.Timeout(60*time.Minute),
asynq.ProcessIn(wikiIngestDelay),
)
if _, err := task.Enqueue(t); err != nil {
logger.Warnf(ctx, "wiki ingest: failed to enqueue trigger task: %v", err)
return fmt.Errorf("enqueue wiki ingest trigger: %w", err)
}
return nil
}
// EnqueueWikiRetract queues a wiki retraction op (a delete cleanup).
// Identical persistence model as EnqueueWikiIngest — the op rides in
// task_pending_ops and an asynq trigger fires shortly after toView on GitHub (pinned to 988cbb0330)
Solutions
- Ensure the wiki ingest service is constructed with a non-nil task enqueuer (asynq client) in the DI wiring.
- If triggers are unsupported in the current mode, guard the call site so enqueue is skipped instead of invoked.
- Check startup logs/config that enable the async task queue before requests reach the trigger path.
Example fix
// before svc := service.NewWikiIngestService(repo, llm, nil) // enqueuer omitted // after svc := service.NewWikiIngestService(repo, llm, taskEnqueuer) // wired asynq client
Defensive patterns
Strategy: validation
Validate before calling
if enqueuer == nil {
return errors.New("task enqueuer must be configured before enqueueing wiki triggers")
} Prevention
- Assert all service dependencies are non-nil at construction/startup.
- Skip trigger enqueue explicitly when async task mode is disabled.
- Cover DI wiring with a smoke test that constructs the service in every supported mode.
When it happens
Trigger: Calling the trigger-enqueue path when the service was constructed without a task enqueuer (nil field), e.g. in a mode or test setup where asynq client wiring was skipped.
Common situations: Service constructed with a nil/omitted TaskEnqueuer dependency; running in a mode where async task infrastructure is disabled but a trigger is still requested; miswired dependency injection container.
Related errors
- concurrent wiki task active
- wiki graph request is required
- LLM returned nil response
- wiki page slug is required
- knowledge_base_id is required
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/2b7c9dabff2c6ffa.
Report an issue: GitHub.