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 to

View on GitHub (pinned to 988cbb0330)

Solutions

  1. Ensure the wiki ingest service is constructed with a non-nil task enqueuer (asynq client) in the DI wiring.
  2. If triggers are unsupported in the current mode, guard the call site so enqueue is skipped instead of invoked.
  3. 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

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


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/2b7c9dabff2c6ffa. Report an issue: GitHub.