dj-signals

Installation
SKILL.md

Add a Reliable Signal

You are adding a reliable signal to an opinionated Django project. Standard Django signals are synchronous and unreliable — receiver failures propagate to the sender, there's no delivery guarantee if the process crashes after commit, and there's no retry. This project uses the reliable signals pattern with Celery instead.

The pattern implemented here is adapted from Haki Benita's article Reliable Signals in Django. Credit for the original design goes to him — read the full article for the rationale and edge cases.

How It Works

Signal receiver tasks are enqueued inside the same database transaction as the business operation. If the transaction rolls back, the tasks roll back too. If it commits, the tasks are guaranteed to be in the queue. Celery processes them asynchronously with at-least-once delivery.

BEFORE WRITING CODE

  1. Read ARCHITECTURE.md if present for the full reliable signals reference
  2. Find existing signals with Grep for ReliableSignal under src/
  3. Find existing receivers with Glob for src/**/receivers.py
  4. Identify which service method should emit the signal and what data needs to travel with it

Related skills

More from dvf/opinionated-django

Installs
10
GitHub Stars
105
First Seen
Apr 15, 2026