fix: error handling hardening — filedrop, persistence, tools #206

Open
doxios wants to merge 6 commits from fix/filedrop-error-handling into main
Collaborator

Closes #202

Audited 3 plugins for error handling issues:

Filedrop

  • Malformed JSON quarantined with _corrupted suffix — no more infinite retry loop
  • Atomic writes via tempfile+rename — no partial files on crash
  • Shared helpers: _quarantine_file, _safe_write_json, _parse_inbox_file, _move_to_processed
  • Outbox write failures logged as warning (non-fatal)
  • datetime.utcnow()datetime.now(timezone.utc) (fixes deprecation)
  • os.chmod 0o7770o775 (security: group-writable, not world-writable)

Persistence

  • Corrupt JSON now logs warning instead of silent except: pass
  • Atomic writes for conversation save
  • OSError on save logged, not crash

Tools

  • Atomic writes for write_file and edit_file

7 new tests, 451 total passing.

Closes #202 Audited 3 plugins for error handling issues: ### Filedrop - **Malformed JSON quarantined** with `_corrupted` suffix — no more infinite retry loop - **Atomic writes** via tempfile+rename — no partial files on crash - Shared helpers: `_quarantine_file`, `_safe_write_json`, `_parse_inbox_file`, `_move_to_processed` - Outbox write failures logged as warning (non-fatal) - `datetime.utcnow()` → `datetime.now(timezone.utc)` (fixes deprecation) - `os.chmod 0o777` → `0o775` (security: group-writable, not world-writable) ### Persistence - Corrupt JSON now logs warning instead of silent `except: pass` - Atomic writes for conversation save - `OSError` on save logged, not crash ### Tools - Atomic writes for `write_file` and `edit_file` **7 new tests**, 451 total passing.
fix: error handling hardening across filedrop, persistence, and tools plugins
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 22s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
54991ce97e
## Filedrop (#202)
- Malformed JSON quarantined with _corrupted suffix (no more infinite retry)
- Atomic writes via tempfile+rename (no partial files on crash)
- Shared helpers: _quarantine_file, _safe_write_json, _parse_inbox_file
- Outbox write failures logged as warning (non-fatal)
- datetime.utcnow() → datetime.now(timezone.utc) (no deprecation warning)
- os.chmod 0o777 → 0o775 (group-writable, not world-writable)
- Version bump 1.0.0 → 1.1.0

## Persistence
- Corrupt conversation JSON now logs warning instead of silent pass
- Atomic writes for conversation save (tempfile+rename)
- OSError handling on save (disk full etc. logged, not crash)

## Tools
- Atomic writes for write_file and edit_file (tempfile+rename)

7 new filedrop error handling tests (31 total).
All 451 tests passing.
doxios force-pushed fix/filedrop-error-handling from 54991ce97e
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 22s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
to d382732553
Some checks failed
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Failing after 21s
CI / test (3.12) (pull_request) Failing after 23s
CI / test (3.13) (pull_request) Failing after 23s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
2026-03-06 05:12:30 +00:00
Compare
ci: retrigger after stale status race
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 22s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
35aace6b99
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 13s
9d0f90eb2d
ci: retrigger CI
Some checks failed
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 22s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
503291de18
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
d7c07c3cce
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
aef20ad367
doxios force-pushed fix/filedrop-error-handling from aef20ad367
Some checks failed
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
to 39ce2e96b7
Some checks failed
CI / lint (pull_request) Successful in 8s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 13s
2026-03-06 07:12:24 +00:00
Compare
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 20s
CI / test (3.12) (pull_request) Failing after 23s
CI / test (3.13) (pull_request) Failing after 22s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 13s
6a9b8b3d9c
ci: retrigger test jobs
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 19s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 22s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 13s
677e1d6c56
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 19s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
7c8ca3bbb0
k9ert force-pushed fix/filedrop-error-handling from 7c8ca3bbb0
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 19s
CI / test (3.12) (pull_request) Failing after 22s
CI / test (3.13) (pull_request) Failing after 21s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 14s
to 0ad40a7df0
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 21s
CI / test (3.12) (pull_request) Failing after 24s
CI / test (3.13) (pull_request) Failing after 25s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 16s
2026-03-08 21:00:45 +00:00
Compare
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Failing after 21s
CI / test (3.12) (pull_request) Failing after 24s
CI / test (3.13) (pull_request) Failing after 23s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 16s
0a1a3530d0
ci: retrigger tests
Some checks failed
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Failing after 21s
CI / test (3.12) (pull_request) Failing after 24s
CI / test (3.13) (pull_request) Failing after 24s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 15s
f8e95b9676
Some checks failed
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Failing after 21s
CI / test (3.12) (pull_request) Failing after 24s
CI / test (3.13) (pull_request) Failing after 24s
CI / build (pull_request) Has been skipped
E2E Tests / e2e (pull_request) Successful in 15s
This pull request doesn't have enough approvals yet. 0 of 1 approvals granted.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/filedrop-error-handling:fix/filedrop-error-handling
git switch fix/filedrop-error-handling
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ultanio/cobot!206
No description provided.