89254f796c
[62845be1] Fix claim_review/evidence 120s timeout: dedupe git calls, parallelize DB reads, bound conventions-validator timeout, add bounded-timeout guard ( #756 )
...
* [62845be1] test(gateway): prove claim_review/evidence timeout fix — dedup, timeout guards
Add the test coverage the acceptance criteria require but the existing
implementation lacked: a git.py-level test proving diff_and_files
resolves the shared workspace/token/head/base state exactly once, and
bounded-timeout tests exercising the actual gateway_timeout trip for
evidence(), claim_review, and the /api/git/diff route. Also fixes
pre-existing ruff-format drift and a mypy no-any-return in the same
fix cluster (content_actions.py, git.py, qa.py, routes/git.py) so
make gate passes clean.
* [62845be1] fix(gateway): add missing evidence_assembly_timeout_seconds/conventions_validator_timeout_seconds settings and Envelope.gateway_timeout classmethod
The claim_review/evidence()/roboco_git_diff bounded-timeout fix referenced
settings.evidence_assembly_timeout_seconds, settings.conventions_validator_timeout_seconds,
and Envelope.gateway_timeout() but none of the three were ever defined,
so every code path that hit the timeout guard raised AttributeError instead
of returning the structured envelope. Added both Settings fields (90s/45s
defaults, well under flow_verb_timeout_seconds) and the Envelope.gateway_timeout
classmethod matching the wire shape api/middleware.py's outer 504 already uses.
* [62845be1] docs(services): document claim_review/evidence timeout fix — dedup, parallelization, bounded timeouts
---------
Co-authored-by: Backend Developer 1 <be-dev-1@roboco.tech >
Co-authored-by: Backend Documenter <be-doc@roboco.tech >
2026-07-31 12:55:52 +00:00
..
2026-07-19 11:50:47 +02:00
2026-07-11 15:51:19 +02:00
2026-07-25 00:41:13 +02:00
2026-07-01 01:11:34 +02:00
2026-07-23 21:09:50 +02:00
2026-07-25 17:13:32 +02:00
2026-07-27 01:28:33 +02:00
2026-06-14 13:43:46 +02:00
2026-06-29 05:38:21 +02:00
2026-06-15 01:23:03 +02:00
2026-07-26 19:11:27 +02:00
2026-07-18 19:11:03 +02:00
2026-07-02 21:05:50 +02:00
2026-06-30 08:08:35 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-07 10:09:23 +02:00
2026-05-16 06:20:35 +02:00
2026-06-29 05:38:21 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-23 21:09:50 +02:00
2026-06-29 05:38:21 +02:00
2026-06-14 13:43:46 +02:00
2026-06-17 16:50:11 +02:00
2026-07-11 22:54:42 +02:00
2026-07-23 00:05:33 +02:00
2026-07-07 10:09:23 +02:00
2026-06-29 05:38:21 +02:00
2026-07-19 17:38:30 +02:00
2026-06-16 18:01:40 +02:00
2026-06-29 11:32:34 +02:00
2026-07-31 12:55:52 +00:00
2026-07-10 00:15:04 +02:00
2026-07-10 00:15:04 +02:00
2026-06-29 11:32:34 +02:00
2026-07-11 09:21:24 +02:00
2026-07-31 12:55:52 +00:00
2026-07-24 17:50:13 +02:00
2026-07-19 08:12:34 +02:00
2026-07-23 21:54:45 +02:00
2026-06-29 05:38:21 +02:00
2026-06-29 05:38:21 +02:00
2026-07-19 08:12:34 +02:00
2026-07-19 08:12:34 +02:00
2026-06-29 05:38:21 +02:00
2026-07-08 16:38:32 +02:00
2026-06-19 09:15:01 +02:00
2026-06-15 07:03:59 +02:00
2026-07-18 15:55:55 +02:00
2026-07-19 08:12:34 +02:00
2026-07-19 08:12:34 +02:00
2026-07-24 17:50:13 +02:00
2026-07-24 14:34:25 +02:00
2026-07-24 14:34:25 +02:00
2026-07-24 14:34:25 +02:00
2026-06-29 11:32:34 +02:00
2026-07-24 17:50:13 +02:00
2026-06-25 18:35:52 +02:00
2026-06-14 23:18:58 +02:00
2026-06-29 05:38:21 +02:00
2026-07-19 08:12:34 +02:00
2026-07-24 17:50:13 +02:00
2026-07-22 03:31:12 +02:00
2026-07-19 11:50:47 +02:00
2026-07-07 10:09:23 +02:00
2026-07-05 13:37:17 +02:00
2026-07-07 10:09:23 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-06-30 08:08:35 +02:00
2026-07-25 17:13:32 +02:00
2026-06-26 01:43:08 +02:00
2026-06-23 07:26:41 +02:00
2026-07-05 16:12:44 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-07 10:09:23 +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-23 00:05:41 +02:00
2026-07-20 20:59:36 +02:00
2026-07-20 20:59:36 +02:00
2026-07-15 08:25:20 +02:00
2026-06-29 05:38:21 +02:00
2026-07-04 03:10:33 +02:00
2026-06-14 13:43:46 +02:00
2026-06-15 06:12:00 +02:00
2026-07-07 10:09:23 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +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-06-26 01:43:08 +02:00
2026-07-04 03:10:33 +02:00
2026-06-29 05:38:21 +02:00
2026-06-29 05:38:21 +02:00
2026-07-07 10:09:23 +02:00
2026-06-25 07:29:27 +02:00
2026-07-19 08:12:34 +02:00
2026-07-23 21:09:50 +02:00
2026-07-01 01:11:34 +02:00
2026-07-15 05:45:57 +02:00
2026-07-22 03:31:12 +02:00
2026-07-23 00:06:14 +02:00
2026-07-15 04:34:06 +02:00
2026-07-10 03:59:13 +02:00
2026-07-22 03:31:25 +02:00
2026-07-10 09:38:10 +02:00
2026-07-08 16:03:00 +02:00
2026-06-29 05:38:21 +02:00
2026-06-30 08:08:35 +02:00
2026-06-30 08:08:35 +02:00
2026-06-29 05:38:21 +02:00
2026-07-16 04:30:18 +02:00
2026-07-22 08:11:28 +02:00
2026-07-22 08:11:28 +02:00
2026-07-18 16:35:28 +02:00
2026-07-22 15:53:02 +02:00
2026-07-14 02:22:37 +02:00
2026-07-25 17:13:32 +02:00
2026-07-07 10:09:23 +02:00
2026-07-22 15:53:02 +02:00
2026-07-18 16:48:45 +02:00
2026-07-25 17:13:32 +02:00
2026-07-18 16:48:45 +02:00
2026-07-09 05:26:30 +02:00
2026-06-29 05:38:21 +02:00
2026-07-18 16:41:18 +02:00
2026-06-21 02:48:07 +02:00
2026-06-15 20:47:41 +02:00
2026-06-15 20:47:41 +02:00
2026-07-26 19:11:27 +02:00
2026-07-25 05:39:44 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 15:07:28 +02:00
2026-07-04 03:10:33 +02:00
2026-07-07 10:09:23 +02:00
2026-07-02 18:28:07 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-24 13:53:29 +02:00
2026-06-29 05:38:21 +02:00
2026-07-22 03:31:01 +02:00
2026-07-25 17:13:32 +02:00
2026-07-26 20:01:24 +02:00
2026-07-25 05:39:44 +02:00
2026-06-21 02:48:07 +02:00
2026-07-23 21:09:50 +02:00
2026-07-11 22:54:42 +02:00
2026-07-23 09:41:27 +02:00
2026-07-19 17:38:30 +02:00
2026-07-18 00:44:48 +02:00
2026-06-29 11:32:34 +02:00
2026-07-11 09:21:24 +02:00
2026-07-13 13:57:14 +02:00
2026-06-03 06:35:03 +02:00
2026-07-07 10:09:23 +02:00
2026-07-24 17:20:20 +02:00
2026-07-19 07:40:18 +02:00
2026-07-18 15:54:49 +02:00
2026-07-23 21:09:50 +02:00
2026-07-25 17:13:32 +02:00
2026-07-18 15:54:49 +02:00
2026-06-17 20:50:07 +02:00
2026-07-23 21:09:50 +02:00
2026-07-07 10:09:23 +02:00
2026-06-22 13:02:59 +02:00
2026-06-30 08:08:35 +02:00
2026-06-12 23:10:21 +02:00
2026-07-25 00:49:13 +02:00
2026-07-11 22:54:42 +02:00
2026-07-11 09:21:12 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 15:51:19 +02:00
2026-07-11 22:54:42 +02:00
2026-07-22 08:11:28 +02:00
2026-07-22 08:11:28 +02:00
2026-07-16 19:49:26 +02:00
2026-07-25 17:13:32 +02:00
2026-07-07 10:09:23 +02:00
2026-07-07 10:09:23 +02:00
2026-06-22 12:37:46 +02:00
2026-06-11 18:16:20 +02:00
2026-07-08 16:38:32 +02:00
2026-07-10 00:15:04 +02:00
2026-06-08 05:17:15 +02:00
2026-07-07 10:09:23 +02:00
2026-06-05 16:35:22 +02:00
2026-06-22 01:59:41 +02:00
2026-06-29 11:32:34 +02:00
2026-06-30 11:05:22 +02:00
2026-07-24 20:29:20 +02:00
2026-06-29 11:32:34 +02:00
2026-07-18 00:44:48 +02:00
2026-07-25 17:13:32 +02:00
2026-07-28 23:52:04 +02:00
2026-07-28 23:52:04 +02:00
2026-07-05 13:37:17 +02:00