task commands that write (start/update/create/comment) fail with SQLite ErrorReadOnly because /var/lib/omni directory is not writable by ben. tasks.db file itself is writable, but sqlite cannot create journal/WAL side files in the parent dir (owned by ava, mode 755). Repro: 'task update t-740 review --json' returns 'attempt to write a readonly database'.
Fixed in Omni/Task/Core.hs by adding a connection fallback: when the DB parent directory is not writable, task now sets PRAGMA journal_mode=MEMORY and PRAGMA temp_store=MEMORY. This avoids creating SQLite sidecar journal/WAL files in /var/lib/omni and prevents ErrorReadOnly on writes. Verified with live repro: task start/comment/update now succeed against /var/lib/omni/tasks.db even though /var/lib/omni is mode 755 and owned by ava.
Verification: ran 7[10000;10000H (all 36 tests passed) and re-ran real failing workflow against /var/lib/omni/tasks.db: task start/comment/update now succeed with no ErrorReadOnly.
Verification details (clean): built and tested Omni/Task.hs (36 tests passed), then re-ran the original failing workflow on /var/lib/omni/tasks.db. task start/comment/update now succeed without SQLite ErrorReadOnly.
Operational follow-up: /var/lib/omni ownership is drifted from declarative config. Omni/Dev/Beryllium/Ava.nix expects , but host currently has . Recommended host fix: Please touch the FIDO authenticator. (or run systemd-tmpfiles from deployed config).
Operational follow-up: /var/lib/omni ownership is drifted from declarative config. Omni/Dev/Beryllium/Ava.nix expects tmpfiles rule d /var/lib/omni 0775 ben users -, but host currently has ava:users 0755.
Recommended host fix:
(or apply tmpfiles via the NixOS config)
Committed in acf1cdd: includes SQLite readonly fallback in Omni/Task/Core.hs plus related rollout changes.
Ava verified: cited commit confirmed in live history; feature shipped. Moving to Verified.
canary from old task binary