Renn F
ce4d02b3c2
fix(gateway): bounded fail-open evidence assembly + PM decision transient-failure bypass
...
Evidence-assembly git legs (diff, changed-files, branch fetch, advisory
conventions run) ran unbounded inside claim_review / claim_doc_task /
claim_gate_review / evidence() / i_am_done's envelope build, so a slow
clone turned the whole verb into a silent 120s FlowVerbTimeout 504.
Each leg now runs through run_bounded_leg under a shared LegBudget
(evidence_assembly_timeout_seconds, 45s total): a timed-out leg — both
asyncio TimeoutError and git's own GitTimeoutError — degrades into an
evidence_gaps note on the envelope instead of hanging the verb, while
non-timeout git errors still propagate. The advisory conventions run
gets an inner-only timeout (conventions_validator_advisory_timeout_
seconds, 30s) threaded down to the subprocess so it is never orphaned
by an outer cancel; the fail-closed i_am_done/pr_pass conventions
gates keep their hardcoded 120s.
_ensure_pm_decision now reports a PmDecisionOutcome: a transient DB
failure recording the PM's decision journal (e.g. lock timeout under
load) no longer launders into a journal:decision gate rejection that
escalates and BLOCKS the task — the verb's own rationale satisfies the
gate with a structured warning, across all seven PM verbs.
Also: repo-wide ruff realignment to the lockfile-pinned ruff (8
format-only diffs, 14 UP038 isinstance conversions) that a transiently
newer venv ruff had masked.
Gate: 15474 passed, 459 skipped; ruff/mypy/xenon/vulture/bandit/
pip-audit/deptry/import-linter/foundation-check all green.
2026-07-31 13:56:19 +02:00
..
2026-05-02 03:11:49 +02:00
2026-07-30 16:35:42 +02:00
2026-07-24 14:34:25 +02:00
2026-07-02 05:46:01 +02:00
2026-07-30 16:35:42 +02:00
2026-06-21 20:31:42 +02:00
2026-07-21 05:54:29 +02:00
2026-06-08 02:45:03 +02:00
2026-07-25 17:13:32 +02:00
2026-06-29 05:38:21 +02:00
2026-07-11 15:51:19 +02:00
2026-07-13 08:06:57 +02:00
2026-07-23 00:06:14 +02:00
2026-07-30 16:35:42 +02:00
2026-07-31 01:53:07 +02:00
2026-07-24 14:41:14 +02:00
2026-07-04 08:29:15 +02:00
2026-07-30 16:35:42 +02:00
2026-07-26 15:07:28 +02:00
2026-07-26 15:07:28 +02:00
2026-07-11 22:54:42 +02:00
2026-07-31 01:53:07 +02:00
2026-07-26 15:07:28 +02:00
2026-07-30 16:35:42 +02:00
2026-06-16 05:13:00 +02:00
2026-07-26 15:07:28 +02:00
2026-07-30 16:35:42 +02:00
2026-07-17 01:52:33 +02:00
2026-07-31 13:56:19 +02:00
2026-07-30 16:35:42 +02:00
2026-07-11 22:54:42 +02:00
2026-07-11 22:54:42 +02:00
2026-07-30 16:35:42 +02:00
2026-07-14 08:56:55 +02:00
2026-07-26 15:07:28 +02:00
2026-07-30 23:37:27 +02:00
2026-06-30 08:08:35 +02:00
2026-06-29 05:38:21 +02:00
2026-05-02 03:11:49 +02:00
2026-07-15 08:25:06 +02:00
2026-07-18 15:55:48 +02:00
2026-06-14 13:43:46 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 17:13:32 +02:00
2026-07-09 20:59:53 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-27 01:28:33 +02:00
2026-07-30 16:35:42 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 17:13:32 +02:00
2026-07-24 14:41:14 +02:00
2026-07-25 05:39:44 +02:00
2026-07-04 03:10:33 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 17:13:32 +02:00
2026-07-16 17:15:12 +02:00
2026-07-25 17:13:32 +02:00
2026-07-30 16:35:42 +02:00
2026-06-21 04:20:07 +02:00
2026-07-31 13:56:19 +02:00
2026-07-31 13:56:19 +02:00
2026-07-31 13:56:19 +02:00
2026-07-25 17:13:32 +02:00
2026-07-31 01:53:07 +02:00
2026-07-04 03:10:33 +02:00
2026-07-31 01:53:07 +02:00
2026-07-31 01:53:07 +02:00
2026-07-31 01:53:07 +02:00
2026-07-04 03:10:33 +02:00
2026-06-14 04:34:02 +02:00
2026-07-26 15:07:28 +02:00
2026-07-04 03:10:33 +02:00
2026-07-04 03:10:33 +02:00
2026-07-25 17:13:32 +02:00
2026-06-14 13:43:46 +02:00
2026-05-11 02:15:47 +02:00
2026-05-11 02:15:47 +02:00
2026-07-07 10:09:23 +02:00
2026-07-31 13:56:19 +02:00
2026-07-13 08:06:57 +02:00
2026-07-31 13:56:19 +02:00
2026-07-13 08:06:57 +02:00
2026-07-04 07:34:40 +02:00
2026-07-30 16:35:42 +02:00
2026-07-30 16:35:42 +02:00
2026-07-30 16:35:42 +02:00
2026-06-11 04:36:17 +02:00
2026-07-30 16:35:42 +02:00
2026-07-26 15:07:28 +02:00
2026-07-26 15:07:28 +02:00
2026-06-29 05:38:21 +02:00
2026-07-08 21:40:22 +02:00
2026-07-02 18:28:07 +02:00
2026-05-16 10:14:45 +02:00
2026-07-08 02:01:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-18 16:41:17 +02:00
2026-07-26 15:07:28 +02:00
2026-07-04 03:10:33 +02:00
2026-07-25 17:13:32 +02:00
2026-07-30 16:35:42 +02:00
2026-07-04 03:10:33 +02:00
2026-07-30 16:35:42 +02:00
2026-07-04 03:10:33 +02:00
2026-06-29 05:38:21 +02:00
2026-06-25 01:07:05 +02:00
2026-07-31 01:53:07 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-21 05:54:29 +02:00
2026-07-31 13:56:19 +02:00
2026-07-31 13:56:19 +02:00
2026-06-21 20:31:42 +02:00
2026-07-04 03:10:33 +02:00
2026-07-30 23:37:27 +02:00
2026-07-16 19:49:26 +02:00
2026-07-11 22:54:42 +02:00
2026-07-01 01:11:34 +02:00
2026-07-24 17:09:49 +02:00
2026-06-29 05:38:21 +02:00
2026-07-17 01:52:33 +02:00
2026-06-30 08:08:35 +02:00
2026-06-21 03:47:17 +02:00
2026-06-26 02:13:41 +02:00
2026-06-21 20:31:42 +02:00
2026-07-04 03:10:33 +02:00
2026-06-25 10:54:31 +02:00
2026-06-14 04:44:21 +02:00
2026-07-17 01:52:33 +02:00
2026-07-08 03:26:12 +02:00
2026-07-23 21:09:50 +02:00
2026-07-24 17:10:20 +02:00
2026-07-16 19:49:26 +02:00
2026-07-13 20:05:45 +02:00
2026-07-17 01:52:33 +02:00
2026-07-30 16:35:42 +02:00
2026-07-03 19:24:00 +02:00
2026-07-09 18:40:12 +02:00
2026-07-11 22:54:42 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-07-25 17:13:32 +02:00
2026-06-16 04:10:05 +02:00
2026-06-14 04:34:02 +02:00
2026-07-30 16:35:42 +02:00
2026-07-30 16:35:42 +02:00
2026-07-24 14:34:25 +02:00
2026-06-29 05:38:21 +02:00
2026-07-16 19:49:26 +02:00
2026-07-31 01:53:07 +02:00
2026-05-12 06:27:33 +02:00
2026-07-11 03:17:59 +02:00
2026-06-30 08:08:35 +02:00
2026-07-18 16:41:17 +02:00
2026-07-16 19:49:26 +02:00
2026-07-05 13:37:17 +02:00
2026-07-26 15:07:28 +02:00