can1357/oh-my-pi · warning · HTTPException
no retryable stored event for {repo_full}#{number}
Error message
no retryable stored event for {repo_full}#{number} What it means
The retry endpoint accepted a valid, allowlisted issue ref but the database has no stored event to retry, returning HTTP 404 'no retryable stored event for owner/repo#N'. Retries work by re-processing the most recent stored webhook delivery for that issue (db.latest_event_for_issue); if the database has never recorded a delivery for it, there is nothing to replay.
Source
Thrown at python/robomp/src/server.py:652
log.info("manual triage", extra={"delivery": delivery, "issue": f"{repo_full}#{number}"})
return JSONResponse(
{"delivery": delivery, "state": "queued", "mode": "triage"},
status_code=202,
)
# mode == "retry"
if isinstance(delivery_id, str) and delivery_id:
target = delivery_id
elif isinstance(issue_ref, str) and issue_ref:
try:
repo_full, number = parse_issue_ref(issue_ref)
except InvalidIssueRef as exc:
raise HTTPException(400, str(exc)) from exc
if not cfg.allows(repo_full):
raise HTTPException(403, f"{repo_full} not in ROBOMP_REPO_ALLOWLIST")
row = db.latest_event_for_issue(make_issue_key(repo_full, number))
if row is None:
raise HTTPException(404, f"no retryable stored event for {repo_full}#{number}")
target = row.delivery_id
else:
raise HTTPException(400, "retry requires 'delivery_id' or 'issue'")
event = db.get_event(target)
if event is None:
raise HTTPException(404, f"unknown delivery {target}")
if not db.requeue_event(target, from_states=INACTIVE_EVENT_STATES):
raise HTTPException(409, f"delivery {target} is {event.state}; only inactive events can be retried")
pool.wake()
log.info("manual retry", extra={"delivery": target})
return JSONResponse(
{"delivery": target, "state": "queued", "mode": "retry"},
status_code=202,
)
@app.post("/api/cancel")
async def api_cancel(View on GitHub (pinned to 9690622007)
Solutions
- Confirm the issue previously arrived via webhook (check server logs or the events listing) before retrying
- Use `delivery_id` from the original webhook instead of `issue` if you have it
- Trigger a fresh triage via the trigger endpoint instead of a retry, since no stored event exists
- Check database retention/cleanup settings if events are disappearing sooner than expected
Example fix
// before: retry by issue when nothing is stored
POST /retry { "issue": "acme/widgets#42" }
// after: replay the known delivery
POST /retry { "delivery_id": "uuid-from-webhook-header" } Defensive patterns
Strategy: validation
Validate before calling
// Confirm a stored event exists for the issue before retrying by ref
const evt = await api.getLatestEventForIssue('acme/widgets#42');
if (!evt) {
throw new Error('no stored delivery for this issue; use trigger (fresh triage) instead of retry');
} Try / catch
try {
await api.retry({ issue: issueRef });
} catch (err) {
if (err.status === 404 && /no retryable stored event/.test(err.message)) {
logger.warn('nothing to replay; falling back to fresh trigger', { issueRef });
await api.trigger({ issue: issueRef });
} else throw err;
} Prevention
- Prefer delivery_id (from the original webhook) over issue refs when available
- Only retry issues that actually arrived via webhook to this instance
- Check database retention settings if events vanish unexpectedly
- Fall back to the trigger endpoint when retry reports no stored event
When it happens
Trigger: POSTing to the retry endpoint with `issue: 'owner/repo#N'` where `db.latest_event_for_issue(make_issue_key(repo_full, number))` returns None — no webhook delivery for that issue was ever persisted (or it was purged/rotated out of the store).
Common situations: Trying to retry an issue that was created manually and never arrived via webhook; the database was reset/migrated and old events are gone; event retention pruning removed the delivery; typo in the issue number pointing at an issue the bot never saw.
Related errors
- unknown delivery {target}
- V2 remote compaction failed (${response.status} ${response.s
- AuthBrokerStreamUnsupportedError
- AI staging request failed: ${response.errorMessage ?? "unkno
- This share no longer exists (gist deleted?).
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/1c5433a0ad619873.
Report an issue: GitHub.