busya
def2bf4038
feat(automation): poisoned-run quarantine policy with durable failure signatures (SCHED-SOAK offline)
- poisoned_store.py: durable JSONL identical-failure counter (fcntl.flock + intra-process lock
+ thread-local reentrancy, append+fsync, torn-line tolerant, CAS quarantine epoch); no
Alembic/ORM changes (046 migrations frozen).
- poisoned.py: N=3 identical infra failures -> typed POISONED_RUN_QUARANTINE, matching
schedules disabled, exactly one blocked notification carrying the DLQ payload; success
resets the pair; operator unquarantine (CAS) re-enables schedules and resets counters.
- REST: GET /scenario-automation/quarantine and POST /quarantine/{scenario_id}/release
(scenario:automation MANAGE; 404 NOT_QUARANTINED / 409 STALE_QUARANTINE_VERSION).
- Tests: 13 policy + 2 API quarantine vectors; merged with the master ReadAcl/RetentionReceipts
classes (conflict resolved keeping both). Focused 31 passed; 046 T023 offline slice.
2026-09-22 12:35:39 +03:00
..
2026-09-22 12:35:39 +03:00
2026-09-16 11:13:50 +03:00
2026-09-18 12:04:50 +03:00
2026-09-22 11:36:44 +03:00
2026-08-20 11:32:26 +03:00
2026-09-22 11:36:44 +03:00
2026-09-16 11:13:50 +03:00
2026-09-11 15:09:16 +03:00
2026-09-22 12:35:39 +03:00
2026-09-04 13:07:08 +03:00
2026-09-05 10:09:49 +03:00
2026-08-25 11:42:31 +03:00
2026-09-15 10:12:17 +03:00
2026-08-13 08:23:43 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-08-19 17:14:32 +03:00
2026-08-06 18:26:50 +07:00
2026-09-16 11:13:50 +03:00
2026-08-19 17:14:32 +03:00
2026-09-16 11:13:50 +03:00
2026-08-19 17:14:32 +03:00
2026-08-19 17:14:32 +03:00
2026-08-24 17:00:17 +03:00
2026-08-19 17:14:32 +03:00
2026-08-25 11:42:31 +03:00
2026-06-15 17:31:43 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-09-16 11:13:50 +03:00
2026-06-16 12:01:03 +03:00
2026-09-16 11:13:50 +03:00
2026-08-10 07:29:08 +03:00
2026-07-22 11:48:15 +03:00
2026-09-04 13:07:08 +03:00
2026-07-22 11:48:15 +03:00
2026-09-04 13:07:08 +03:00
2026-07-22 11:48:15 +03:00
2026-08-25 11:42:31 +03:00
2026-09-05 10:09:49 +03:00
2026-07-22 11:48:15 +03:00
2026-09-10 10:57:18 +03:00
2026-09-10 10:57:18 +03:00
2026-09-10 10:57:18 +03:00
2026-09-10 10:57:18 +03:00
2026-09-07 16:52:38 +03:00
2026-09-07 16:52:38 +03:00
2026-08-28 19:01:42 +03:00
2026-09-03 13:02:57 +03:00
2026-09-15 10:12:17 +03:00
2026-09-07 16:52:38 +03:00
2026-09-07 11:26:34 +03:00
2026-09-03 13:02:57 +03:00
2026-09-07 16:52:38 +03:00
2026-09-15 10:12:17 +03:00
2026-09-17 22:11:28 +03:00
2026-08-28 19:01:42 +03:00
2026-09-05 20:16:26 +03:00
2026-09-11 19:05:20 +03:00
2026-09-07 11:26:34 +03:00
2026-09-10 16:13:44 +03:00
2026-09-17 22:11:28 +03:00
2026-09-07 11:26:34 +03:00
2026-09-04 13:07:08 +03:00
2026-09-16 11:13:50 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-23 16:45:15 +03:00
2026-09-11 17:27:45 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-06-16 12:01:03 +03:00
2026-08-25 11:42:31 +03:00
2026-08-13 08:23:43 +03:00
2026-09-04 20:56:41 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-08-03 23:52:03 +07:00
2026-07-22 11:48:15 +03:00
2026-08-25 11:42:31 +03:00
2026-09-04 20:56:41 +03:00
2026-08-25 11:42:31 +03:00
2026-07-22 11:48:15 +03:00
2026-07-23 16:45:15 +03:00
2026-07-22 11:48:15 +03:00
2026-07-22 11:48:15 +03:00
2026-08-21 16:15:40 +03:00
2026-08-21 16:15:40 +03:00
2026-08-21 16:15:40 +03:00
2026-07-22 11:48:15 +03:00