Peter Steinberger
96b2a203ce
perf(pr): accept gate-proven in-progress CI runs for landing ( #109331 )
...
* perf(pr): accept gate-proven in-progress CI runs for landing
verify-pr-hosted-gates required the whole CI run to reach completed,
but openclaw/ci-gate — the branch-protection check — needs every
selected lane and fails on any non-success, so a successful gate bound
to the run's check suite proves the merge-relevant outcome while
post-gate stragglers (timing summaries, artifact uploads) are still
running. prepare-run now accepts an in-progress run whose own gate
check succeeded, cutting one to several minutes per landing. Exact
attempt binding via check_suite id prevents a stale gate from a
previous attempt vouching for a rerun; gate proof only applies to the
exact head under verification, never recent-parent evidence.
* fix(pr): bind gate proof to the run attempt, not the check suite
Autoreview P1: check suites survive reruns, so a prior attempt's
successful gate could vouch for an in-progress rerun that has not
reached its own gate. The proof now goes through the attempt-scoped
jobs listing (filter=latest): the gate job must carry the run's own
run_attempt. Regression tests cover same-run/previous-attempt,
different-run, failed, and missing gate jobs.
* fix(pr): rely on filter=latest for gate attempt scoping
Autoreview P2: the REST list-jobs payload does not expose run_attempt,
so requiring it rejected every genuine rerun gate. loadCiGateJobs
already fetches per run with filter=latest, which scopes to the current
attempt, so a run_id match binds the gate correctly without the absent
field.
* fix(pr): declare ciGateJobs in the hosted-gates evidence typedef
* fix(pr): un-export the internal gate helper and loosen test id typing
hasSuccessfulCiGateJob is only reached through collectHostedGateEvidence,
so exporting it tripped the hard-zero deadcode gate; the new test also
typed workflow ids as number against the unknown-shaped return.
* fix(pr): bind early gate proof to the run attempt
Autoreview P1: workflow attempts share a run id and filter=latest keeps
a not-yet-rerun job's prior-attempt execution, so a partial rerun could
surface an old successful ci-gate. The REST job payload does expose
run_attempt (verified live), so fetch the attempt-specific jobs endpoint
and require the gate job's run_attempt to equal the run's.
* fix(pr): revalidate the run attempt after loading gate jobs
Autoreview P2: a rerun starting between the workflow-run snapshot and the
attempt-specific jobs fetch could return a stale prior-attempt gate. Re-read
the run after fetching its jobs and drop the evidence if the run completed or
its attempt advanced, so early proof only applies while the same attempt is
still pending.
2026-07-16 18:31:40 -07:00
..
2026-07-12 18:57:49 +02:00
2026-07-15 22:40:00 -07:00
2026-07-16 05:26:00 -07:00
2026-07-15 21:47:53 -04:00
2026-07-16 15:46:32 -07:00
2026-06-04 20:52:50 -04:00
2026-07-15 22:40:00 -07:00
2026-06-22 17:17:48 +00:00
2026-07-16 18:20:34 -07:00
2026-07-15 22:57:36 -07:00
2026-07-15 22:40:00 -07:00
2026-07-10 10:42:36 +01:00
2026-07-16 03:21:08 -07:00
2026-07-16 17:53:09 -07:00
2026-07-16 13:51:18 -07:00
2026-07-16 17:20:47 -07:00
2026-07-12 09:01:33 +01:00
2026-06-21 07:40:06 +02:00
2026-07-10 13:34:03 +01:00
2026-06-04 20:52:50 -04:00
2026-07-16 09:33:52 -07:00
2026-07-07 16:13:55 -07:00
2026-07-07 00:39:59 +01:00
2026-06-16 19:13:44 +02:00
2026-06-16 19:13:44 +02:00
2026-07-13 21:48:29 -07:00
2026-06-20 11:08:34 +08:00
2026-06-20 11:08:34 +08:00
2026-07-16 09:39:48 -07:00
2026-07-13 00:35:31 -07:00
2026-07-10 10:42:36 +01:00
2026-07-11 06:15:41 -07:00
2026-07-14 10:21:56 -07:00
2026-07-16 00:57:19 -07:00
2026-07-12 10:17:00 +01:00
2026-07-14 16:14:48 +05:30
2026-07-12 22:18:10 -07:00
2026-07-12 10:17:00 +01:00
2026-07-15 01:52:49 -07:00
2026-07-13 22:12:21 -07:00
2026-07-11 06:15:41 -07:00
2026-06-23 14:01:29 +02:00
2026-07-11 02:31:17 -07:00
2026-07-11 06:15:41 -07:00
2026-07-16 04:54:34 -07:00
2026-06-20 21:36:42 +02:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-16 22:48:03 +01:00
2026-07-16 22:48:03 +01:00
2026-06-04 22:49:21 -04:00
2026-06-04 23:28:04 -04:00
2026-06-04 23:28:04 -04:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:28:04 -04:00
2026-07-12 17:24:45 -07:00
2026-07-12 17:24:45 -07:00
2026-07-11 06:15:41 -07:00
2026-07-13 01:53:28 -07:00
2026-07-15 04:15:23 -07:00
2026-07-16 12:52:28 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 15:17:41 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:28:04 -04:00
2026-07-11 02:31:17 -07:00
2026-06-04 23:28:04 -04:00
2026-07-15 03:45:37 -07:00
2026-07-15 03:45:37 -07:00
2026-07-13 23:58:19 -07:00
2026-07-13 05:07:18 -07:00
2026-07-13 17:46:28 -07:00
2026-07-12 23:13:04 -07:00
2026-07-11 06:15:41 -07:00
2026-07-16 16:47:19 -07:00
2026-07-15 17:05:07 +01:00
2026-07-16 10:46:44 -07:00
2026-07-15 22:40:00 -07:00
2026-07-16 10:46:44 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-15 04:15:23 -07:00
2026-06-04 23:30:59 -04:00
2026-07-10 13:00:50 +01:00
2026-07-11 06:15:41 -07:00
2026-06-21 19:59:55 +02:00
2026-07-11 06:15:41 -07:00
2026-07-14 06:36:51 -07:00
2026-07-15 22:40:00 -07:00
2026-07-11 06:15:41 -07:00
2026-07-14 10:21:56 -07:00
2026-07-11 06:15:41 -07:00
2026-07-13 09:37:55 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-13 21:35:24 -07:00
2026-07-11 06:15:41 -07:00
2026-07-11 15:04:25 -07:00
2026-07-11 06:15:41 -07:00
2026-07-09 16:36:31 +01:00
2026-06-04 20:52:50 -04:00
2026-07-07 11:55:57 -07:00
2026-07-16 01:45:06 -07:00
2026-06-04 20:52:50 -04:00
2026-06-04 20:52:50 -04:00
2026-07-14 09:27:02 -07:00
2026-07-15 05:03:43 +01:00
2026-06-04 23:34:16 -04:00
2026-07-11 06:15:41 -07:00
2026-07-11 01:09:51 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-14 19:43:18 -07:00
2026-06-04 20:52:50 -04:00
2026-07-16 13:55:23 -07:00
2026-06-04 20:52:50 -04:00
2026-06-04 23:34:16 -04:00
2026-07-11 06:15:41 -07:00
2026-07-11 03:27:14 -07:00
2026-07-14 20:45:57 -07:00
2026-06-04 23:34:16 -04:00
2026-07-11 06:15:41 -07:00
2026-07-14 10:21:56 -07:00
2026-07-07 11:55:57 -07:00
2026-06-04 23:37:42 -04:00
2026-07-14 23:19:48 -07:00
2026-06-20 22:16:26 +02:00
2026-07-11 06:15:41 -07:00
2026-07-04 14:56:50 -04:00
2026-07-13 01:39:38 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-11 06:15:41 -07:00
2026-06-23 17:37:53 +02:00
2026-07-11 06:15:41 -07:00
2026-06-21 22:19:54 +02:00
2026-07-16 08:35:10 -07:00
2026-07-14 10:21:56 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-06-26 18:28:35 -07:00
2026-07-13 00:34:57 -07:00
2026-07-13 02:39:01 -07:00
2026-07-11 06:15:41 -07:00
2026-07-10 00:21:26 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:37:42 -04:00
2026-07-11 06:15:41 -07:00
2026-07-16 18:15:58 -07:00
2026-07-11 06:15:41 -07:00
2026-07-14 10:41:36 -07:00
2026-07-11 14:50:37 -07:00
2026-07-16 12:14:06 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:37:42 -04:00
2026-07-10 11:54:08 +01:00
2026-06-04 23:37:42 -04:00
2026-07-13 22:43:26 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:37:42 -04:00
2026-06-04 23:37:42 -04:00
2026-07-11 07:28:20 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:42:32 -04:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-07 11:55:57 -07:00
2026-06-23 17:27:32 +08:00
2026-07-11 06:15:41 -07:00
2026-07-14 09:27:02 -07:00
2026-07-14 09:27:02 -07:00
2026-07-16 12:52:28 -07:00
2026-06-20 20:12:30 +02:00
2026-07-06 04:20:58 -07:00
2026-06-21 18:04:47 +02:00
2026-07-15 13:06:24 -07:00
2026-07-16 17:22:28 -07:00
2026-07-16 17:22:28 -07:00
2026-07-11 06:15:41 -07:00
2026-06-22 18:44:21 +08:00
2026-07-12 07:44:25 +08:00
2026-06-28 17:22:26 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-06-20 21:41:34 +02:00
2026-07-11 00:44:16 +01:00
2026-07-04 23:19:38 +01:00
2026-07-15 13:22:31 -07:00
2026-07-07 16:13:55 -07:00
2026-07-16 12:52:28 -07:00
2026-07-14 01:12:36 -07:00
2026-07-14 01:12:36 -07:00
2026-07-14 01:57:30 -07:00
2026-07-13 11:49:42 -07:00
2026-07-14 08:43:35 -07:00
2026-07-13 11:49:42 -07:00
2026-07-13 16:15:50 -07:00
2026-07-12 17:24:45 -07:00
2026-06-06 09:14:12 -07:00
2026-06-04 23:42:32 -04:00
2026-07-15 22:32:29 -07:00
2026-07-11 06:15:41 -07:00
2026-07-06 14:52:53 -04:00
2026-07-13 19:03:31 -07:00
2026-07-13 22:09:36 -07:00
2026-07-16 00:16:20 -07:00
2026-07-12 10:17:00 +01:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-11 06:15:41 -07:00
2026-06-23 13:43:44 +02:00
2026-07-11 06:15:41 -07:00
2026-06-20 02:02:37 +02:00
2026-07-14 15:02:56 -07:00
2026-07-11 00:51:57 -07:00
2026-06-23 16:26:42 +02:00
2026-06-16 07:39:44 +02:00
2026-07-06 10:26:51 -07:00
2026-06-04 23:42:32 -04:00
2026-07-01 01:51:50 -07:00
2026-07-16 20:43:06 -04:00
2026-07-16 20:43:06 -04:00
2026-07-12 10:17:00 +01:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:42:32 -04:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:42:32 -04:00
2026-07-11 06:15:41 -07:00
2026-06-24 13:24:43 +08:00
2026-06-22 19:11:46 +08:00
2026-07-11 06:15:41 -07:00
2026-07-07 15:17:41 -07:00
2026-07-11 13:45:27 +08:00
2026-07-13 17:53:10 -07:00
2026-07-16 10:26:29 +01:00
2026-07-13 03:14:49 +01:00
2026-07-13 03:14:49 +01:00
2026-07-07 11:55:57 -07:00
2026-07-13 07:57:23 -07:00
2026-06-04 20:52:50 -04:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-11 06:15:41 -07:00
2026-07-03 15:36:11 +00:00
2026-07-10 11:54:08 +01:00
2026-07-12 04:43:33 +02:00
2026-07-13 01:53:28 -07:00
2026-07-13 01:53:28 -07:00
2026-07-14 23:41:24 -04:00
2026-06-04 20:52:50 -04:00
2026-07-07 11:55:57 -07:00
2026-06-04 20:52:50 -04:00
2026-07-11 14:50:37 -07:00
2026-07-16 17:33:35 -07:00
2026-06-04 23:46:55 -04:00
2026-07-16 17:17:07 -07:00
2026-07-16 01:44:30 -07:00
2026-07-16 01:44:30 -07:00
2026-07-16 08:02:31 -07:00
2026-07-15 23:01:31 -07:00
2026-06-23 19:18:51 -05:00
2026-06-16 15:59:02 +02:00
2026-06-22 21:07:57 -04:00
2026-07-01 20:24:38 -05:00
2026-07-10 10:42:36 +01:00
2026-06-21 21:39:41 +02:00
2026-07-01 20:24:38 -05:00
2026-07-01 22:05:26 -05:00
2026-06-15 19:27:55 +02:00
2026-07-01 22:05:26 -05:00
2026-06-15 19:27:55 +02:00
2026-07-13 19:12:21 -05:00
2026-07-01 22:05:26 -05:00
2026-07-10 11:54:08 +01:00
2026-07-10 10:42:36 +01:00
2026-07-11 15:57:55 +08:00
2026-07-13 23:33:30 -07:00
2026-07-10 11:54:08 +01:00
2026-06-15 14:23:57 +08:00
2026-06-04 20:52:50 -04:00
2026-07-13 07:57:23 -07:00
2026-07-14 00:27:34 +01:00
2026-07-10 13:33:20 -07:00
2026-07-15 22:40:00 -07:00
2026-07-11 06:15:41 -07:00
2026-07-15 22:40:00 -07:00
2026-07-07 16:13:55 -07:00
2026-07-16 16:08:16 -07:00
2026-06-20 21:44:09 +02:00
2026-06-21 11:15:14 +02:00
2026-07-14 17:28:45 -07:00
2026-07-11 19:57:54 +08:00
2026-07-15 22:40:00 -07:00
2026-07-11 06:15:41 -07:00
2026-07-10 20:16:19 +01:00
2026-07-15 18:24:39 +01:00
2026-07-14 05:41:24 -07:00
2026-07-04 08:22:39 -07:00
2026-07-13 12:00:47 -07:00
2026-07-15 13:22:31 -07:00
2026-07-15 22:40:00 -07:00
2026-07-11 06:15:41 -07:00
2026-06-21 22:02:05 +02:00
2026-07-14 23:19:48 -07:00
2026-06-12 20:16:06 -07:00
2026-06-12 20:16:06 -07:00
2026-07-11 02:31:17 -07:00
2026-07-11 12:48:27 +08:00
2026-07-11 02:26:06 -07:00
2026-07-04 08:00:15 +02:00
2026-07-13 17:15:32 -07:00
2026-07-16 17:09:56 -07:00
2026-07-12 17:35:47 -07:00
2026-07-12 17:35:47 -07:00
2026-07-11 06:15:41 -07:00
2026-07-16 11:16:29 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:46:55 -04:00
2026-07-13 01:29:33 -07:00
2026-07-10 13:33:20 -07:00
2026-07-04 15:13:31 -06:00
2026-07-07 11:55:57 -07:00
2026-07-08 08:01:00 -07:00
2026-07-07 11:55:57 -07:00
2026-07-07 11:55:57 -07:00
2026-06-04 23:46:55 -04:00
2026-07-11 06:15:41 -07:00
2026-07-13 08:55:23 +08:00
2026-07-07 16:13:55 -07:00
2026-07-11 06:15:41 -07:00
2026-07-16 18:10:26 -07:00
2026-06-21 11:15:14 +02:00
2026-07-11 06:15:41 -07:00
2026-07-07 00:07:05 +01:00
2026-07-13 17:53:10 -07:00
2026-07-05 13:33:04 -04:00
2026-07-15 00:26:41 -07:00
2026-07-15 00:26:41 -07:00
2026-06-04 20:52:50 -04:00
2026-07-12 10:17:00 +01:00
2026-07-11 06:15:41 -07:00
2026-07-15 01:22:20 -07:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:48:20 -04:00
2026-07-14 05:41:24 -07:00
2026-07-13 22:33:12 -07:00
2026-06-04 20:52:50 -04:00
2026-06-04 23:48:20 -04:00
2026-07-11 06:15:41 -07:00
2026-07-13 01:53:28 -07:00
2026-07-11 07:28:20 -07:00
2026-06-04 20:52:50 -04:00
2026-07-16 05:43:02 -07:00
2026-07-13 21:48:29 -07:00
2026-07-16 05:29:01 -07:00
2026-06-04 20:52:50 -04:00
2026-06-21 17:51:44 +02:00
2026-06-04 23:49:34 -04:00
2026-07-04 06:51:03 -04:00
2026-07-12 10:17:00 +01:00
2026-06-24 10:22:56 +08:00
2026-07-04 06:51:03 -04:00
2026-07-11 01:09:51 -07:00
2026-07-15 12:55:00 -07:00
2026-07-15 08:02:17 +01:00
2026-07-15 08:02:17 +01:00
2026-07-16 14:11:33 -07:00
2026-07-14 09:48:37 -04:00
2026-07-16 13:38:56 -07:00
2026-06-15 14:23:57 +08:00
2026-07-10 17:47:32 -07:00
2026-07-10 17:47:32 -07:00
2026-07-10 11:32:24 -07:00
2026-06-04 20:52:50 -04:00
2026-07-12 10:17:00 +01:00
2026-07-11 06:15:41 -07:00
2026-07-15 22:40:00 -07:00
2026-07-11 06:15:41 -07:00
2026-07-15 22:40:00 -07:00
2026-07-15 10:05:02 -07:00
2026-07-11 06:15:41 -07:00
2026-07-12 11:45:03 +01:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-11 17:27:01 -07:00
2026-07-11 06:15:41 -07:00
2026-07-14 09:59:20 -07:00
2026-07-11 06:15:41 -07:00
2026-07-16 17:12:50 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 10:22:07 +01:00
2026-07-16 22:48:03 +01:00
2026-07-16 22:48:03 +01:00
2026-06-20 22:37:26 +08:00
2026-07-10 19:18:47 -07:00
2026-06-20 20:07:50 +02:00
2026-06-23 14:08:20 +08:00
2026-07-11 06:15:41 -07:00
2026-07-16 17:09:56 -07:00
2026-07-11 06:15:41 -07:00
2026-07-06 02:24:37 -07:00
2026-06-04 23:52:06 -04:00
2026-07-11 06:15:41 -07:00
2026-06-21 21:53:58 +02:00
2026-07-11 06:15:41 -07:00
2026-07-16 17:22:28 -07:00
2026-07-11 06:15:41 -07:00
2026-07-10 23:30:57 +01:00
2026-06-04 23:52:06 -04:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:52:06 -04:00
2026-07-12 17:24:45 -07:00
2026-07-12 17:24:45 -07:00
2026-06-24 22:54:00 +08:00
2026-07-04 06:40:45 -04:00
2026-06-19 08:24:16 +08:00
2026-06-17 00:55:54 +02:00
2026-07-11 00:07:59 -07:00
2026-06-08 18:59:51 -07:00
2026-07-11 06:30:57 -07:00
2026-07-13 23:33:30 -07:00
2026-07-14 16:05:14 -07:00
2026-07-14 16:05:14 -07:00
2026-06-04 23:53:10 -04:00
2026-07-05 01:56:40 -04:00
2026-06-21 07:40:06 +02:00
2026-06-21 07:40:06 +02:00
2026-06-21 07:40:06 +02:00
2026-06-04 23:53:10 -04:00
2026-06-04 23:53:10 -04:00
2026-07-11 06:15:41 -07:00
2026-06-04 23:53:10 -04:00
2026-06-03 07:30:12 -07:00
2026-06-06 20:53:08 +02:00
2026-07-11 06:15:41 -07:00
2026-07-15 22:40:00 -07:00
2026-07-13 21:35:24 -07:00
2026-07-11 06:15:41 -07:00
2026-07-13 03:16:28 -07:00
2026-06-05 22:59:54 -07:00
2026-07-13 15:09:26 -07:00
2026-07-11 06:15:41 -07:00
2026-07-13 03:16:28 -07:00
2026-06-07 01:11:24 +02:00
2026-07-11 00:51:57 -07:00
2026-06-19 02:21:10 +02:00
2026-07-06 02:58:59 -07:00
2026-07-10 08:18:44 -07:00
2026-07-11 01:03:30 +01:00
2026-07-11 06:30:57 -07:00
2026-06-18 23:26:21 +02:00
2026-06-18 23:33:44 +02:00
2026-07-11 06:15:41 -07:00
2026-07-16 11:45:31 -07:00
2026-07-11 06:30:57 -07:00
2026-07-11 06:15:41 -07:00
2026-07-11 00:58:14 -07:00
2026-07-11 06:15:41 -07:00
2026-06-07 01:24:10 +02:00
2026-06-04 23:54:19 -04:00
2026-06-04 23:54:19 -04:00
2026-06-04 23:54:19 -04:00
2026-07-16 16:42:01 +01:00
2026-07-16 16:42:01 +01:00
2026-07-16 17:20:47 -07:00
2026-07-11 06:15:41 -07:00
2026-06-23 12:40:25 +02:00
2026-07-12 10:17:00 +01:00
2026-07-13 21:35:24 -07:00
2026-06-04 23:55:54 -04:00
2026-06-04 23:55:54 -04:00
2026-06-04 23:55:54 -04:00
2026-07-11 06:15:41 -07:00
2026-07-15 22:40:00 -07:00
2026-07-11 02:31:17 -07:00
2026-07-11 06:15:41 -07:00
2026-07-07 15:17:41 -07:00
2026-07-12 17:26:04 -07:00
2026-07-11 06:15:41 -07:00
2026-07-16 05:58:53 -07:00
2026-07-14 18:08:33 -07:00
2026-07-07 11:55:57 -07:00
2026-07-13 22:43:26 -07:00
2026-06-04 20:52:50 -04:00
2026-07-11 06:15:41 -07:00
2026-07-13 13:38:19 +08:00
2026-06-26 16:43:51 -07:00
2026-07-10 13:33:20 -07:00
2026-07-11 06:15:41 -07:00
2026-07-10 13:33:20 -07:00
2026-07-11 06:15:41 -07:00
2026-06-21 18:43:05 +02:00
2026-07-11 06:15:41 -07:00
2026-07-07 11:55:57 -07:00
2026-07-16 18:31:40 -07:00
2026-07-16 18:31:40 -07:00
2026-07-14 00:27:34 +01:00
2026-07-07 11:55:57 -07:00
2026-07-11 06:15:41 -07:00
2026-06-20 15:35:33 +02:00
2026-07-11 06:15:41 -07:00
2026-07-16 08:57:32 -07:00
2026-07-12 17:24:45 -07:00
2026-07-12 17:24:45 -07:00
2026-07-10 10:42:36 +01:00
2026-07-14 00:21:36 -07:00
2026-07-11 06:15:41 -07:00
2026-07-12 17:24:45 -07:00
2026-07-14 23:19:48 -07:00
2026-07-12 19:58:55 -07:00
2026-06-21 11:15:14 +02:00