On 2026-10-11 at ~17:40 MDT, while cleaning up test files from the shared
Open WebUI instance (chat.inference.coop), the stewarding bot
(@inferencebot) ran a bulk delete that was scoped far too broadly: it deleted
every file row not matching the 9 co-op documentation files. This also matched 28 files that members had uploaded themselves (screenshots, photos, PDFs,
archive scans). Open WebUI deletes the physical upload along with the database
row, so the files initially appeared unrecoverable from the live system.
Impact
27 member-uploaded files deleted (~32MB total). Known groups:
1 additional deleted file (timing-test.md) was the bot's own test upload,
not member data.
No other data affected: chat history, API keys, balances, and the docs
knowledge base are intact.
Resolution
All 27 member files were recovered the same day from the nightly Cloudron
app backup taken at 17:01 MDT (39 minutes before the deletion):
Created a fresh safety backup of the app's current state
Restored the app to the pre-deletion backup
Extracted the deleted uploads to durable off-app storage
Restored the app back to the current-state backup (health-verified)
The recovered files are held by the bot pending per-member re-upload. Files
will only be re-uploaded at a member's request — most local copies likely
still exist on members' own devices.
Root cause
The deletion script filtered the shared file table by "everything not in the
docs list" instead of targeting the bot's own test uploads by exact ID. Open
WebUI is a shared instance: member uploads and operator files live in the
same table, and filename-based exclusion is never a safe deletion scope.
Preventive measures (implemented)
Deletion policy recorded in the bot's operational skill and memory:
never bulk-delete from a shared instance by exclusion; delete only files
the bot itself created, by exact file ID, one by one.
Restore drill now proven: this incident validated the backup→restore
path end-to-end (backup, restore, extract, re-restore). Recovery of app
data from backups is now a tested capability, not a guess.
Backup cadence confirmed adequate: nightly app backups caught a
same-day destructive error with only ~39 minutes of exposure. (Off-box
backup storage remains a separate open item for infrastructure.)
Cleanup scripts require an allow-list: any future bot-side cleanup
must enumerate exact IDs to delete and show the list before executing.
## Summary
On **2026-10-11 at ~17:40 MDT**, while cleaning up test files from the shared
Open WebUI instance (chat.inference.coop), the stewarding bot
(@inferencebot) ran a bulk delete that was scoped far too broadly: it deleted
every file row not matching the 9 co-op documentation files. This also matched
**28 files that members had uploaded themselves** (screenshots, photos, PDFs,
archive scans). Open WebUI deletes the physical upload along with the database
row, so the files initially appeared unrecoverable from the live system.
## Impact
- **27 member-uploaded files deleted** (~32MB total). Known groups:
- 10 archive scans (`blha_161_ns-archiv_obj_05_za_56-7949_image_*.jpeg`)
- 3 copies of `2026-08-14 TALKS RADIO PARA STATION OF COMMONS.pdf`
- 3 desktop screenshots, 2 phone photos, `Twelve.txt`, `FB_IMG_….jpg`,
`NCSAM-week-InfographicV3.png`, and misc images
- 1 additional deleted file (`timing-test.md`) was the bot's own test upload,
not member data.
- No other data affected: chat history, API keys, balances, and the docs
knowledge base are intact.
## Resolution
All 27 member files were **recovered the same day** from the nightly Cloudron
app backup taken at 17:01 MDT (39 minutes before the deletion):
1. Created a fresh safety backup of the app's current state
2. Restored the app to the pre-deletion backup
3. Extracted the deleted uploads to durable off-app storage
4. Restored the app back to the current-state backup (health-verified)
The recovered files are held by the bot pending per-member re-upload. **Files
will only be re-uploaded at a member's request** — most local copies likely
still exist on members' own devices.
## Root cause
The deletion script filtered the shared `file` table by "everything not in the
docs list" instead of targeting the bot's own test uploads by exact ID. Open
WebUI is a shared instance: **member uploads and operator files live in the
same table**, and filename-based exclusion is never a safe deletion scope.
## Preventive measures (implemented)
1. **Deletion policy recorded in the bot's operational skill and memory:**
never bulk-delete from a shared instance by exclusion; delete only files
the bot itself created, by exact file ID, one by one.
2. **Restore drill now proven:** this incident validated the backup→restore
path end-to-end (backup, restore, extract, re-restore). Recovery of app
data from backups is now a tested capability, not a guess.
3. **Backup cadence confirmed adequate:** nightly app backups caught a
same-day destructive error with only ~39 minutes of exposure. (Off-box
backup storage remains a separate open item for infrastructure.)
4. **Cleanup scripts require an allow-list:** any future bot-side cleanup
must enumerate exact IDs to delete and show the list before executing.
All 27 member files recovered from the 17:01 MDT app backup (restore → extract → re-restore verified) and held in durable storage pending per-member requests.
No re-uploads needed so far — no member has reported a missing file since the notice in #general; local copies appear to have survived on members' own devices.
Preventive measures in place: deletion policy recorded operationally (exact-ID allow-lists only, never filename-exclusion in shared instances), the backup→restore path is now a proven drill rather than a guess, and the nightly scheduler gap that surfaced during the recovery was found and fixed (see #19-adjacent infra work and the updated operator runbook).
The recovered files remain available on request — if any member notices something missing, ping @inferencebot or reopen this issue. Thanks to everyone for patience during the incident.
Closing this out — all actions complete:
- **All 27 member files recovered** from the 17:01 MDT app backup (restore → extract → re-restore verified) and held in durable storage pending per-member requests.
- **No re-uploads needed so far** — no member has reported a missing file since the notice in #general; local copies appear to have survived on members' own devices.
- **Preventive measures in place:** deletion policy recorded operationally (exact-ID allow-lists only, never filename-exclusion in shared instances), the backup→restore path is now a proven drill rather than a guess, and the nightly scheduler gap that surfaced during the recovery was found and fixed (see #19-adjacent infra work and the updated operator runbook).
The recovered files remain available on request — if any member notices something missing, ping @inferencebot or reopen this issue. Thanks to everyone for patience during the incident.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
On 2026-10-11 at ~17:40 MDT, while cleaning up test files from the shared
Open WebUI instance (chat.inference.coop), the stewarding bot
(@inferencebot) ran a bulk delete that was scoped far too broadly: it deleted
every file row not matching the 9 co-op documentation files. This also matched
28 files that members had uploaded themselves (screenshots, photos, PDFs,
archive scans). Open WebUI deletes the physical upload along with the database
row, so the files initially appeared unrecoverable from the live system.
Impact
blha_161_ns-archiv_obj_05_za_56-7949_image_*.jpeg)2026-08-14 TALKS RADIO PARA STATION OF COMMONS.pdfTwelve.txt,FB_IMG_….jpg,NCSAM-week-InfographicV3.png, and misc imagestiming-test.md) was the bot's own test upload,not member data.
knowledge base are intact.
Resolution
All 27 member files were recovered the same day from the nightly Cloudron
app backup taken at 17:01 MDT (39 minutes before the deletion):
The recovered files are held by the bot pending per-member re-upload. Files
will only be re-uploaded at a member's request — most local copies likely
still exist on members' own devices.
Root cause
The deletion script filtered the shared
filetable by "everything not in thedocs list" instead of targeting the bot's own test uploads by exact ID. Open
WebUI is a shared instance: member uploads and operator files live in the
same table, and filename-based exclusion is never a safe deletion scope.
Preventive measures (implemented)
never bulk-delete from a shared instance by exclusion; delete only files
the bot itself created, by exact file ID, one by one.
path end-to-end (backup, restore, extract, re-restore). Recovery of app
data from backups is now a tested capability, not a guess.
same-day destructive error with only ~39 minutes of exposure. (Off-box
backup storage remains a separate open item for infrastructure.)
must enumerate exact IDs to delete and show the list before executing.
Closing this out — all actions complete:
The recovered files remain available on request — if any member notices something missing, ping @inferencebot or reopen this issue. Thanks to everyone for patience during the incident.