These are the important cases. Each one shows real queue events from the live pilot where they exist, plus the repo tests that pin the behavior. The tests were run for this page: Ran 19 tests in 0.714s, OK, at dispatcher commit c8c4b942a7.
The sandbox can't start, so the agent never runs
This happened while the page was being built. The first demo run on this machine asked Docker for two CPUs, and the VM only has 1. The baseline container never started. The job was blocked before any coding step, and no artifact was produced beyond the failed log.
Queue events, demo attempt 1 (real)| Since first | Audit action | Detail |
|---|
| +0 | ingested | needs_review |
| +1 ms | approved | |
| +121 ms | started | |
| +482 ms | blocked | Baseline checks failed; repair the environment or triage existing failures |
baseline-0.log
docker: Error response from daemon: range of CPUs is from 0.01 to 1.00, as there are only 1 CPUs available
Run 'docker run --help' for more information
The block message says the baseline checks failed, when Docker actually refused to start the container. The outcome was correct, but the message pointed at the wrong cause. The page's data comes from a second run with that one flag lowered (see method).
Pinned by
Read test_baseline_failure_does_not_launch_agent
def test_baseline_failure_does_not_launch_agent(self):
runner = self.run_worker("baseline")
self.assertEqual(len(runner.calls), 1)
self.assertEqual(self.store.get(self.job)["status"], "blocked")
A report or approval changes underneath a job
Approval belongs to one report revision under one policy. Editing the report, changing the policy, or withdrawing eligibility in Linear cancels queued or running work, and the job has to be approved again. On the release side, a status change is never taken as approval. The release controller needs a signed webhook delivery from the owner.
Real: DYL-15 reached Ready to Deploy without a verified owner webhook| Since first | Audit action | Detail |
|---|
| +0 | published | https://github.com/DylnMtthws/deck-lab/pull/39 |
| +10.7 min | release_blocked | Ready to Deploy was observed without a verified owner webhook. Move the issue back to Ready for Your Review, then select Ready to Deploy again; check webhook delivery if this repeats. |
| +25.4 min | linear_release_approved | {"head": "8e06dc47cb578c1cbf8582c034880f2b78a1f79f"} |
| +25.5 min | release_progress | validating |
| +25.9 min | release_progress | merging |
| +26.5 min | release_progress | main_ci |
| +31.9 min | release_progress | dispatching |
| +32.2 min | release_progress | deploying |
| +36.9 min | release_progress | deploying |
| +37.0 min | release_progress | done |
The controller refused to act on the status alone and said how to retry. Fifteen minutes later a verified approval arrived, and the release ran through merge, main CI and deploy.
Real: a job whose policy changed and whose eligibility was then withdrawn, before any work started| Since first | Audit action | Detail |
|---|
| +0 | ingested | queued |
| +3.5 s | policy_changed_or_limit_reached | |
| +10.0 s | automatic_approval | |
| +14.1 s | policy_changed_or_limit_reached | |
| +55.0 s | eligibility_withdrawn | |
Pinned by
Read test_report_update_cancels_run
def test_report_update_cancels_run(self):
job = self.enqueue()
self.store.approve(job, self.project)
self.store.claim(self.project)
self.store.ingest(
self.project, "manual", "1", {"title": "Updated", "description": "Changed"}
)
self.assertTrue(self.store.cancelled(job))
self.store.finish(job, "ready", artifact="unsafe")
row = self.store.get(job)
self.assertEqual(row["status"], "cancelled")
self.assertIsNone(row["artifact"])
Commits move after the evidence was gathered
Evidence is only valid for the commits it was gathered on. The publisher compares the live base branch with the recorded base before any write. The release controller won't merge if the PR head differs from the reviewed head, and it won't deploy if main gained unrelated commits after the merge. A tampered artifact stops publication before any GitHub call.
None of these fired during the live pilot, so this card shows only the tests that pin the behavior.
Pinned by
Read test_moved_base_prevents_writes
def test_moved_base_prevents_writes(self):
self.client.base_sha = "b" * 40
with self.assertRaises(DispatchError):
publish(self.store, self.project, self.job, client=self.client)
self.assertTrue(all(method == "GET" for method, _, _ in self.client.calls))
self.assertEqual(self.store.get(self.job)["status"], "blocked")
self.store.approve(self.job, self.project)
self.assertEqual(self.store.get(self.job)["status"], "queued")
A provider response is lost
GitHub and SQLite can't commit together. The dispatcher records its intent before each remote write. When the outcome is unclear, it inspects remote state and does not repeat the write.
Real: DYL-12 publication hit an ambiguous write, then reconciled into a single PR| Since first | Audit action | Detail |
|---|
| +0 | review_completed | pass:77198b3a43fd25e8205e7db42a1f1bef2532fa1b5749c938e37314a330186b6f |
| +2 ms | ready | |
| +241 ms | publication_started | |
| +8.3 s | publication_needs_attention | Inspect publisher auth or reconcile an ambiguous write |
| +12.6 min | publication_started | |
| +12.7 min | published | https://github.com/DylnMtthws/deck-lab/pull/33 |
The first publication attempt ended in publication_needs_attention. Twelve minutes later, once the publisher's ten-minute lease had expired, publication ran again. A job left in publishing can only resume in reconcile mode, which looks for an existing branch and PR before creating anything. That job has exactly one pull request, #33.
Real: DYL-14 production deploy failed and was not re-dispatched blindly| Since first | Audit action | Detail |
|---|
| +0 | linear_release_approved | {"head": "f6381bf0ec25ef25811c911676233f16675cd2f1"} |
| +16.6 s | release_progress | validating |
| +40.0 s | release_progress | merging |
| +77.7 s | release_progress | main_ci |
| +6.8 min | release_progress | dispatching |
| +7.1 min | release_progress | deploying |
| +8.2 min | release_retry | Production workflow failed: https://github.com/DylnMtthws/deck-lab/actions/runs/34365278353. Inspect backup and deployment receipt before retrying; the old build may still be live. |
| +9.3 min | release_retry | Production workflow failed: https://github.com/DylnMtthws/deck-lab/actions/runs/34365278353. Inspect backup and deployment receipt before retrying; the old build may still be live. |
| +10.3 min | release_blocked | Production workflow failed: https://github.com/DylnMtthws/deck-lab/actions/runs/34365278353. Inspect backup and deployment receipt before retrying; the old build may still be live. |
| +40.1 min | linear_release_approved | {"head": "f6381bf0ec25ef25811c911676233f16675cd2f1"} |
| +41.6 min | release_progress | main_ci |
| +41.9 min | release_progress | dispatching |
| +42.2 min | release_progress | deploying |
| +48.3 min | release_progress | deploying |
| +48.3 min | release_progress | done |
After the production workflow failed, the controller recorded the failure, stopped, and told the operator to check the backup and deployment receipt. It deployed again only after a new verified owner approval.
Pinned by
Read test_lost_pr_response_reconciles_without_duplicate_creation
def test_lost_pr_response_reconciles_without_duplicate_creation(self):
self.client.lose_response = True
with self.assertRaises(DispatchError):
publish(self.store, self.project, self.job, client=self.client)
self.assertEqual(self.store.get(self.job)["status"], "publishing")
with self.assertRaises(DispatchError):
publish(self.store, self.project, self.job, reconcile=True, client=self.client)
with self.store.transaction() as db:
db.execute("UPDATE jobs SET deadline=? WHERE id=?", (time.time() - 1, self.job))
publish(self.store, self.project, self.job, reconcile=True, client=self.client)
self.assertEqual(
sum(method == "POST" and path == "/pulls" for method, path, _ in self.client.calls),
1,
)
The reviewer keeps blocking
Blocking review findings go back to the coding worker for repair, at most twice. Every repair is verified fresh and reviewed again, and there is never a third round. In this run, review asked for a human decision twice. The second repair then ran past its deadline, so the job was blocked, not retried.
Before this job started, the queue logged 22 policy changes and 22 re-approvals while the operator was adjusting the registration. It didn't run under a policy that was still changing.
Real: two reviews, two repairs, then blocked with no third round| Since first | Audit action | Detail |
|---|
| +0 | started | |
| +79.6 s | coding_started | |
| +7.5 min | verifying | |
| +7.5 min | verification_started | |
| +9.6 min | review_started | |
| +9.9 min | preview_prepared | fc5146fa8e1a0b6b4e88c311e6c8f3500cb95ae22940551fd2447afd9f19ffb1 |
| +11.6 min | review_completed | needs_human_review:fc5146fa8e1a0b6b4e88c311e6c8f3500cb95ae22940551fd2447afd9f19ffb1 |
| +11.6 min | repair_started | 1 |
| +11.7 min | repair_started | |
| +23.2 min | verifying | |
| +23.2 min | verification_started | |
| +25.3 min | review_started | |
| +25.6 min | preview_prepared | c6f49c10aabaf66849bb26c3d914f3c2a8d2b09570b12e3acd74d6118181e18d |
| +26.9 min | review_completed | needs_human_review:c6f49c10aabaf66849bb26c3d914f3c2a8d2b09570b12e3acd74d6118181e18d |
| +26.9 min | repair_started | 2 |
| +26.9 min | repair_started | |
| +30.0 min | blocked | Worker cancelled or deadline exceeded |
Pinned by
Read test_two_repair_round_bound_is_enforced
def test_two_repair_round_bound_is_enforced(self):
runner, reviews = self.exercise(
[{"verdict": "changes_required", "findings": [self.finding(i)]} for i in range(3)]
)
self.assertEqual(len(reviews), 3)
self.assertEqual(sum(c["phase"] == "agent" for c in runner.calls), 3)
self.assertEqual(self.store.get(self.job)["status"], "blocked")