diff --git a/slides/images/01-cover.png b/slides/images/01-cover.png
index 3d94b0b..2197dbb 100644
Binary files a/slides/images/01-cover.png and b/slides/images/01-cover.png differ
diff --git a/slides/images/05-model.png b/slides/images/05-model.png
index cb35810..0b4a7e7 100644
Binary files a/slides/images/05-model.png and b/slides/images/05-model.png differ
diff --git a/slides/images/07-state.png b/slides/images/07-state.png
index 9dda4b4..1b8344d 100644
Binary files a/slides/images/07-state.png and b/slides/images/07-state.png differ
diff --git a/slides/slides.js b/slides/slides.js
index f80a257..6a61df7 100644
--- a/slides/slides.js
+++ b/slides/slides.js
@@ -55,18 +55,7 @@ const slides = [
]
},
{
- eyebrow: '06 / Safe Claim',
- title: 'PostgreSQL Chooses the Winner',
- subtitle: 'Atomic claim uses row locks and SKIP LOCKED to avoid double execution.',
- image: 'images/06-claim.png',
- notes: [
- 'The worker selects the next eligible queued job ordered by priority, available_at, created_at, and id.',
- 'Inside one transaction, it uses SELECT ... FOR UPDATE SKIP LOCKED, then marks the row running, increments attempts, and sets the lease.',
- 'When many threads race, one locks the row; the others skip it instead of waiting and accidentally claiming the same job.'
- ]
- },
- {
- eyebrow: '07 / State',
+ eyebrow: '06 / State',
title: 'Status Transitions Are Explicit',
subtitle: 'The queue allows only meaningful movement between queued, running, succeeded, and failed.',
image: 'images/07-state.png',
@@ -76,6 +65,17 @@ const slides = [
'When attempts are exhausted, the job becomes failed. Manual retry can move failed back to queued and resets the attempt count.'
]
},
+ {
+ eyebrow: '07 / Safe Claim',
+ title: 'PostgreSQL Chooses the Winner',
+ subtitle: 'Atomic claim uses row locks and SKIP LOCKED to avoid double execution.',
+ image: 'images/06-claim.png',
+ notes: [
+ 'The worker selects the next eligible queued job ordered by priority, available_at, created_at, and id.',
+ 'Inside one transaction, it uses SELECT ... FOR UPDATE SKIP LOCKED, then marks the row running, increments attempts, and sets the lease.',
+ 'When many threads race, one locks the row; the others skip it instead of waiting and accidentally claiming the same job.'
+ ]
+ },
{
eyebrow: '08 / Ownership',
title: 'Current Owner + Attempt Is the Write Token',