677142a680
v0.40.6.0 feat(sync): parallel sync --all + per-source lock invariant + sources status dashboard (productionized from PR #1314 ) ( #1324 )
...
* v0.40.4.0 feat(sync): parallel sync --all + per-source lock invariant + sources status dashboard (productionized from PR #1314 )
Lands the community-authored PR #1314 with the structural fixes Codex's
outside-voice review caught: the original PR's lock-id change only fired
inside the --all parallel path, which would have introduced a worse race
than the global-lock contention it fixed (sync --all on per-source lock
racing against sync --source foo on the still-global lock). The landed
version makes the per-source lock the invariant for every source-scoped
sync, paired with withRefreshingLock for sources that exceed 30 minutes.
What's new
- gbrain sync --all parallel fan-out via continuous worker pool (D2);
--parallel N flag, default min(sourceCount, --workers, 4); per-source
[<source-id>] line prefix via AsyncLocalStorage (D6 + D12 + D13);
stable --json envelope {schema_version:1, ...} on stdout with banners
on stderr (D4 + D14); --skip-failed/--retry-failed reject under
--parallel > 1 (D15 — sync-failures.jsonl is brain-global today;
source-scoping filed as v0.40.4 TODO).
- gbrain sources status [--json] read-only dashboard (D3 — sibling to
sources list/add/remove/archive, not a sync flag, so reads + writes
don't share a verb). Counts pages + chunks + embedding coverage per
source. Active embedding column resolved via the registry (D16) so
Voyage / multimodal brains see the right column. Archived sources
excluded by caller filter.
- Connection-budget stderr warning when parallel × workers × 2 > 16 with
the formula in the message text (D1 + D10 — Codex P0 #3 : each per-file
worker opens its own PostgresEngine with poolSize=2, so the
multiplication factor is 2, not 1).
The load-bearing structural fix
- performSync defaults to per-source lock id (gbrain-sync:<sourceId>)
whenever opts.sourceId is set + wraps in withRefreshingLock. Legacy
single-default-source brains keep the bare tryAcquireDbLock(SYNC_LOCK_ID)
path for back-compat.
- Dashboard SQL is the canonical content_chunks ch JOIN pages pg ON
pg.id = ch.page_id WHERE pg.deleted_at IS NULL shape — the original PR
shipped chunks ch JOIN ON page_slug, which would have crashed on PGLite
parse and silently zeroed on Postgres via a swallow-catch. Errors from
the dashboard SQL propagate (no silent zero-counts on real DB errors).
Tests
- New test/console-prefix.test.ts — 8 cases pinning ALS propagation,
nested wraps, embedded-newline prefixing, back-compat fast path.
- New test/sync-all-parallel.test.ts (replaces PR's stubbed tests) —
16 cases covering resolveParallelism, per-source lock format,
buildSyncStatusReport SQL math + error propagation + envelope shape,
connection-budget math, per-source prefix routing.
- New test/e2e/sync-status-pglite.test.ts — IRON RULE regression: real
PGLite seeds 2 sources × pages × chunks (mixed embedded/unembedded,
1 soft-deleted, 1 archived source). Validates SQL excludes both AND
the active embedding column is the one used. This is the case that
would have caught the PR's original broken SQL.
Compatibility
- No schema changes. No new dependencies.
- Single-source / non-`--all` paths: bit-for-bit identical to v0.40.2.
- PGLite users get serial behavior (single-connection engine).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
Co-Authored-By: garrytan-agents <garrytan-agents@users.noreply.github.com >
* v0.40.6.0 — version bump for ship (skipping 0.40.4 + 0.40.5 for in-flight work)
Reserves v0.40.4 + v0.40.5 slots for parallel waves (salem's graph-signals
work and any other in-flight branches) and lands this PR's parallel-sync
work at v0.40.6.0. No code change beyond the version triple and the
TODOS / CLAUDE.md / CHANGELOG cross-references which were updated from
"v0.40.4" to "v0.41+" to match the new follow-up version.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
Co-authored-by: garrytan-agents <garrytan-agents@users.noreply.github.com >
2026-05-23 10:57:32 -07:00
..
2026-05-22 09:10:20 -07:00
2026-05-23 10:01:08 -07:00
2026-05-22 11:53:11 -07:00
2026-05-23 08:49:28 -07:00
2026-05-14 19:13:14 -07:00
2026-05-22 21:18:09 -07:00
2026-05-22 13:38:07 -07:00
2026-05-23 10:57:32 -07:00
2026-05-17 18:52:38 -07:00
2026-05-22 22:16:25 -07:00
2026-05-20 20:25:41 -07:00
2026-05-21 22:11:00 -07:00
2026-05-22 08:00:42 -07:00
2026-05-22 09:10:20 -07:00
2026-05-22 22:37:15 -07:00
2026-05-17 08:32:03 -07:00
2026-05-23 10:01:08 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 09:10:20 -07:00
2026-05-18 20:55:57 -07:00
2026-05-22 09:10:20 -07:00
2026-04-29 23:46:36 -07:00
2026-05-07 21:52:58 -07:00
2026-05-10 20:06:31 -07:00
2026-05-18 20:55:57 -07:00
2026-05-18 20:55:57 -07:00
2026-05-02 08:41:11 -07:00
2026-05-22 13:38:07 -07:00
2026-05-18 21:11:02 -07:00
2026-05-11 22:54:35 -07:00
2026-05-23 08:49:28 -07:00
2026-05-06 21:14:34 -07:00
2026-05-18 20:55:57 -07:00
2026-05-22 21:04:30 -07:00
2026-05-22 21:04:30 -07:00
2026-05-22 21:04:30 -07:00
2026-05-18 20:55:57 -07:00
2026-05-21 08:29:55 -07:00
2026-05-21 08:29:55 -07:00
2026-04-21 18:35:45 -07:00
2026-05-14 21:06:42 -07:00
2026-05-08 13:25:48 -07:00
2026-05-08 13:25:48 -07:00
2026-05-18 20:55:57 -07:00
2026-04-14 19:41:34 -10:00
2026-05-18 21:11:02 -07:00
2026-04-22 01:34:22 -07:00
2026-05-14 19:13:14 -07:00
2026-05-14 19:13:14 -07:00
2026-05-07 21:52:58 -07:00
2026-05-14 20:15:29 -07:00
2026-04-30 20:47:32 -07:00
2026-05-07 21:52:58 -07:00
2026-05-10 20:50:40 -07:00
2026-05-02 22:01:05 -07:00
2026-05-21 18:57:05 -07:00
2026-05-19 10:05:31 -07:00
2026-05-22 09:29:59 -07:00
2026-05-22 09:29:59 -07:00
2026-05-22 09:29:59 -07:00
2026-05-22 21:18:09 -07:00
2026-05-22 11:53:11 -07:00
2026-04-21 11:51:32 -07:00
2026-05-18 19:34:44 -07:00
2026-05-20 09:19:18 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 21:18:09 -07:00
2026-05-22 21:18:09 -07:00
2026-04-25 12:25:34 -07:00
2026-05-18 12:53:01 -07:00
2026-05-02 08:41:11 -07:00
2026-05-11 19:25:48 -07:00
2026-04-09 12:25:04 -10:00
2026-05-14 21:06:42 -07:00
2026-04-25 12:25:34 -07:00
2026-05-14 19:13:14 -07:00
2026-04-25 12:25:34 -07:00
2026-05-11 22:54:35 -07:00
2026-04-29 23:46:36 -07:00
2026-05-18 20:55:57 -07:00
2026-05-09 19:47:56 -07:00
2026-05-22 21:18:09 -07:00
2026-05-07 13:41:46 -07:00
2026-05-23 10:01:08 -07:00
2026-05-02 08:41:11 -07:00
2026-05-07 10:03:38 -07:00
2026-05-21 22:11:00 -07:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-05-14 19:50:50 -04:00
2026-05-13 13:14:58 -04:00
2026-05-19 13:12:40 -07:00
2026-05-09 22:58:19 -07:00
2026-05-21 18:57:05 -07:00
2026-05-13 13:14:58 -04:00
2026-05-18 20:55:57 -07:00
2026-05-08 13:25:48 -07:00
2026-04-26 15:49:48 -07:00
2026-05-23 10:57:32 -07:00
2026-05-18 21:11:02 -07:00
2026-05-11 21:49:57 -07:00
2026-05-23 08:49:28 -07:00
2026-05-23 08:49:28 -07:00
2026-05-23 08:49:28 -07:00
2026-05-18 21:26:12 -07:00
2026-05-18 19:34:44 -07:00
2026-05-06 20:39:56 -07:00
2026-05-06 20:39:56 -07:00
2026-05-06 20:39:56 -07:00
2026-05-21 22:11:00 -07:00
2026-05-23 10:01:08 -07:00
2026-05-19 17:14:53 -07:00
2026-05-22 21:04:30 -07:00
2026-05-09 16:57:47 -07:00
2026-05-22 21:04:30 -07:00
2026-05-22 21:04:30 -07:00
2026-04-30 01:23:29 -07:00
2026-05-22 21:04:30 -07:00
2026-05-08 17:07:51 -07:00
2026-05-09 20:46:34 -07:00
2026-05-11 23:02:03 -07:00
2026-05-09 20:46:34 -07:00
2026-04-14 19:41:34 -10:00
2026-05-23 10:21:59 -07:00
2026-05-08 13:25:48 -07:00
2026-04-22 16:24:23 -07:00
2026-05-03 20:41:39 -07:00
2026-04-29 22:21:07 -07:00
2026-05-22 13:38:07 -07:00
2026-05-18 19:34:44 -07:00
2026-05-18 20:55:57 -07:00
2026-05-22 21:04:30 -07:00
2026-05-22 21:04:30 -07:00
2026-05-23 10:21:59 -07:00
2026-04-20 21:54:36 +08:00
2026-05-22 09:29:59 -07:00
2026-05-19 13:12:40 -07:00
2026-04-26 15:49:48 -07:00
2026-05-21 22:11:00 -07:00
2026-05-21 18:57:05 -07:00
2026-05-13 13:14:58 -04:00
2026-05-21 08:29:55 -07:00
2026-05-21 22:11:00 -07:00
2026-05-23 10:01:08 -07:00
2026-04-30 01:23:29 -07:00
2026-05-02 22:01:05 -07:00
2026-05-13 13:14:58 -04:00
2026-04-20 21:54:36 +08:00
2026-05-14 19:13:14 -07:00
2026-05-07 21:52:58 -07:00
2026-05-23 10:21:59 -07:00
2026-05-19 17:14:53 -07:00
2026-05-23 10:21:59 -07:00
2026-05-14 21:22:10 -07:00
2026-05-23 08:49:28 -07:00
2026-05-21 22:11:00 -07:00
2026-05-15 18:54:36 -07:00
2026-05-07 21:52:58 -07:00
2026-04-11 00:01:09 -10:00
2026-05-22 22:37:15 -07:00
2026-05-22 22:37:15 -07:00
2026-05-07 10:03:38 -07:00
2026-05-10 06:34:40 -07:00
2026-05-22 13:38:07 -07:00
2026-04-14 19:41:34 -10:00
2026-05-11 23:02:03 -07:00
2026-05-17 08:51:33 -07:00
2026-05-22 22:37:15 -07:00
2026-04-25 12:25:34 -07:00
2026-05-01 09:02:43 -07:00
2026-05-01 09:02:43 -07:00
2026-05-01 09:02:43 -07:00
2026-05-13 13:14:58 -04:00
2026-05-17 08:32:03 -07:00
2026-05-17 08:32:03 -07:00
2026-05-18 19:34:44 -07:00
2026-05-11 22:42:54 -07:00
2026-05-17 08:32:03 -07:00
2026-05-11 22:42:54 -07:00
2026-05-17 08:32:03 -07:00
2026-05-17 08:32:03 -07:00
2026-05-17 08:32:03 -07:00
2026-05-11 22:42:54 -07:00
2026-05-17 08:32:03 -07:00
2026-05-11 22:42:54 -07:00
2026-05-17 08:32:03 -07:00
2026-05-17 08:32:03 -07:00
2026-05-17 08:32:03 -07:00
2026-05-17 08:32:03 -07:00
2026-05-22 22:16:25 -07:00
2026-05-01 09:02:43 -07:00
2026-05-22 22:16:25 -07:00
2026-05-01 09:02:43 -07:00
2026-05-22 22:16:25 -07:00
2026-05-01 09:02:43 -07:00
2026-05-13 13:14:58 -04:00
2026-05-22 13:38:07 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-17 18:52:38 -07:00
2026-05-12 14:33:29 -07:00
2026-04-13 21:03:40 -10:00
2026-05-17 14:27:31 -07:00
2026-05-22 13:38:07 -07:00
2026-05-02 22:01:05 -07:00
2026-05-18 20:55:57 -07:00
2026-05-11 19:25:48 -07:00
2026-05-09 20:46:34 -07:00
2026-04-29 10:12:10 -07:00
2026-05-21 08:29:55 -07:00
2026-05-10 06:34:40 -07:00
2026-05-06 21:14:34 -07:00
2026-05-09 20:46:34 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 21:18:09 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-05-10 12:49:14 -07:00
2026-05-17 08:51:33 -07:00
2026-05-09 16:57:47 -07:00
2026-05-10 12:49:14 -07:00
2026-05-09 16:57:47 -07:00
2026-05-10 12:49:14 -07:00
2026-05-09 16:57:47 -07:00
2026-05-10 12:49:14 -07:00
2026-05-10 12:49:14 -07:00
2026-05-10 20:06:31 -07:00
2026-05-10 12:49:14 -07:00
2026-05-10 12:49:14 -07:00
2026-05-17 18:52:38 -07:00
2026-05-11 19:25:48 -07:00
2026-05-11 19:25:48 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-05-09 16:57:47 -07:00
2026-04-20 07:30:00 +08:00
2026-05-23 10:21:59 -07:00
2026-04-14 21:40:48 -10:00
2026-04-25 12:25:34 -07:00
2026-05-17 08:51:33 -07:00
2026-04-09 10:17:13 -07:00
2026-04-13 07:49:13 -10:00
2026-04-16 23:03:15 -07:00
2026-04-13 07:49:13 -10:00
2026-04-23 19:34:27 -07:00
2026-05-12 14:33:29 -07:00
2026-05-22 21:18:09 -07:00
2026-05-22 22:37:15 -07:00
2026-04-29 23:46:36 -07:00
2026-04-29 23:46:36 -07:00
2026-05-18 20:55:57 -07:00
2026-05-21 09:26:37 -07:00
2026-04-26 20:45:05 -07:00
2026-05-18 21:26:12 -07:00
2026-04-29 23:46:36 -07:00
2026-05-14 19:13:14 -07:00
2026-05-17 08:00:29 -07:00
2026-05-18 19:34:44 -07:00
2026-05-18 19:34:44 -07:00
2026-05-21 08:29:55 -07:00
2026-05-18 19:34:44 -07:00
2026-05-23 10:21:59 -07:00
2026-04-29 22:13:05 -07:00
2026-05-09 22:58:19 -07:00
2026-05-01 09:02:43 -07:00
2026-05-13 13:14:58 -04:00
2026-05-14 20:51:11 -07:00
2026-05-22 21:18:09 -07:00
2026-05-07 10:03:38 -07:00
2026-05-14 20:51:11 -07:00
2026-05-21 08:29:55 -07:00
2026-04-12 07:48:47 -10:00
2026-04-25 12:25:34 -07:00
2026-05-22 13:38:07 -07:00
2026-05-21 18:57:05 -07:00
2026-05-07 22:56:22 -07:00
2026-04-18 16:57:38 +08:00
2026-05-13 13:14:58 -04:00
2026-05-21 18:57:05 -07:00
2026-05-11 19:25:48 -07:00
2026-05-22 21:54:13 -07:00
2026-04-16 23:03:15 -07:00
2026-04-22 01:34:22 -07:00
2026-05-13 13:14:58 -04:00
2026-04-25 12:25:34 -07:00
2026-05-21 18:57:05 -07:00
2026-04-25 12:25:34 -07:00
2026-05-11 21:49:57 -07:00
2026-05-22 13:38:07 -07:00
2026-04-26 20:45:05 -07:00
2026-04-11 21:25:44 -10:00
2026-05-22 21:04:30 -07:00
2026-05-19 17:14:53 -07:00
2026-05-22 09:10:20 -07:00
2026-05-18 21:26:12 -07:00
2026-05-22 22:37:15 -07:00
2026-05-22 22:37:15 -07:00
2026-05-07 19:49:46 -07:00
2026-05-22 22:37:15 -07:00
2026-05-22 08:00:42 -07:00
2026-05-21 09:26:37 -07:00
2026-04-24 00:08:54 -07:00
2026-05-09 19:47:56 -07:00
2026-05-07 22:56:22 -07:00
2026-05-04 21:11:15 -07:00
2026-05-18 20:55:57 -07:00
2026-05-17 08:00:29 -07:00
2026-05-13 13:14:58 -04:00
2026-05-08 13:25:48 -07:00
2026-05-22 22:37:15 -07:00
2026-04-26 20:45:05 -07:00
2026-05-10 12:49:14 -07:00
2026-05-09 20:46:34 -07:00
2026-05-09 20:46:34 -07:00
2026-05-11 22:54:35 -07:00
2026-04-18 16:57:38 +08:00
2026-04-18 16:57:38 +08:00
2026-04-18 18:16:18 +08:00
2026-04-19 07:14:24 +08:00
2026-04-22 01:34:22 -07:00
2026-04-20 07:30:00 +08:00
2026-04-29 23:46:36 -07:00
2026-04-22 01:34:22 -07:00
2026-04-25 12:25:34 -07:00
2026-04-25 12:25:34 -07:00
2026-05-22 09:29:59 -07:00
2026-05-07 10:03:38 -07:00
2026-05-11 19:25:48 -07:00
2026-05-10 06:34:40 -07:00
2026-04-22 01:34:22 -07:00
2026-05-19 13:12:40 -07:00
2026-05-19 13:12:40 -07:00
2026-05-19 13:12:40 -07:00
2026-04-24 01:09:28 -07:00
2026-04-29 23:06:16 -07:00
2026-05-23 08:49:28 -07:00
2026-05-22 09:10:20 -07:00
2026-05-02 22:01:05 -07:00
2026-05-23 08:49:28 -07:00
2026-05-10 13:33:05 -07:00
2026-05-03 20:41:39 -07:00
2026-05-22 22:16:25 -07:00
2026-05-10 12:49:14 -07:00
2026-05-18 19:34:44 -07:00
2026-05-21 08:29:55 -07:00
2026-05-09 19:47:56 -07:00
2026-05-22 09:10:20 -07:00
2026-05-19 10:05:31 -07:00
2026-05-18 21:11:02 -07:00
2026-05-14 19:13:14 -07:00
2026-04-30 01:23:29 -07:00
2026-05-07 21:52:58 -07:00
2026-05-18 21:26:12 -07:00
2026-05-17 18:52:38 -07:00
2026-05-17 14:02:45 -07:00
2026-05-06 21:14:34 -07:00
2026-05-22 13:38:07 -07:00
2026-05-03 20:41:39 -07:00
2026-05-23 10:21:59 -07:00
2026-04-25 12:25:34 -07:00
2026-04-08 23:26:11 -10:00
2026-05-09 20:46:34 -07:00
2026-05-14 21:22:10 -07:00
2026-04-12 17:38:48 -07:00
2026-05-18 06:22:12 -07:00
2026-05-23 10:21:59 -07:00
2026-05-18 06:22:12 -07:00
2026-05-22 21:04:30 -07:00
2026-04-23 19:34:27 -07:00
2026-05-02 08:41:11 -07:00
2026-04-20 07:30:00 +08:00
2026-04-21 18:35:45 -07:00
2026-05-09 20:46:34 -07:00
2026-05-03 20:16:15 -07:00
2026-05-11 19:25:48 -07:00
2026-04-29 23:46:36 -07:00
2026-04-30 20:47:32 -07:00
2026-05-18 19:34:44 -07:00
2026-05-21 18:57:05 -07:00
2026-05-22 08:00:42 -07:00
2026-04-12 13:23:55 -10:00
2026-05-14 19:13:14 -07:00
2026-05-22 21:18:09 -07:00
2026-04-25 12:25:34 -07:00
2026-05-23 08:49:28 -07:00
2026-05-13 13:14:58 -04:00
2026-05-18 21:11:02 -07:00
2026-05-07 10:03:38 -07:00
2026-05-07 21:52:58 -07:00
2026-05-07 21:52:58 -07:00
2026-04-16 23:03:15 -07:00
2026-04-22 01:34:22 -07:00
2026-04-22 01:34:22 -07:00
2026-05-18 21:11:02 -07:00
2026-05-11 23:20:17 -07:00
2026-05-18 19:34:44 -07:00
2026-05-11 23:20:17 -07:00
2026-05-07 21:52:58 -07:00
2026-05-07 21:52:58 -07:00
2026-05-03 20:16:15 -07:00
2026-05-22 21:04:30 -07:00
2026-04-23 19:34:27 -07:00
2026-05-22 11:53:11 -07:00
2026-05-21 08:59:29 -07:00
2026-05-21 08:59:29 -07:00
2026-05-21 08:59:29 -07:00
2026-05-21 08:29:55 -07:00
2026-05-23 08:49:28 -07:00
2026-05-23 08:49:28 -07:00
2026-04-19 07:14:24 +08:00
2026-05-18 12:53:01 -07:00
2026-04-11 21:25:44 -10:00
2026-04-25 12:25:34 -07:00
2026-05-15 06:48:36 -07:00
2026-04-21 18:35:45 -07:00
2026-05-10 13:20:07 -07:00
2026-04-24 01:39:58 -07:00
2026-05-17 08:00:29 -07:00
2026-05-06 16:32:11 -07:00
2026-05-18 21:11:02 -07:00
2026-05-08 13:25:48 -07:00
2026-04-30 23:17:54 -07:00
2026-04-23 19:34:27 -07:00
2026-05-07 21:52:58 -07:00
2026-04-29 23:46:36 -07:00
2026-05-23 08:49:28 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 13:38:07 -07:00
2026-05-22 13:38:07 -07:00
2026-04-27 22:59:08 -07:00
2026-05-22 09:10:20 -07:00
2026-05-22 21:18:09 -07:00
2026-05-22 09:10:20 -07:00
2026-05-19 17:14:53 -07:00
2026-05-07 10:03:38 -07:00
2026-04-25 12:25:34 -07:00
2026-04-16 23:03:15 -07:00
2026-05-23 10:01:08 -07:00
2026-05-13 13:14:58 -04:00
2026-05-12 14:33:29 -07:00
2026-05-17 15:41:43 -07:00
2026-04-29 23:46:36 -07:00
2026-04-30 20:47:32 -07:00
2026-05-18 20:55:57 -07:00
2026-05-07 13:17:27 -07:00
2026-05-14 20:15:29 -07:00
2026-04-09 10:17:13 -07:00
2026-05-20 13:55:12 -07:00
2026-04-23 19:34:27 -07:00
2026-04-22 02:07:00 -07:00
2026-05-06 20:39:56 -07:00
2026-05-18 12:53:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-18 12:53:01 -07:00
2026-04-18 16:57:38 +08:00
2026-05-18 12:53:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-19 18:12:01 -07:00
2026-04-30 23:17:54 -07:00
2026-05-19 18:12:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-18 12:53:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-19 18:12:01 -07:00
2026-05-19 18:12:01 -07:00
2026-04-14 19:41:34 -10:00
2026-05-11 22:54:35 -07:00
2026-05-14 20:51:11 -07:00
2026-05-23 10:21:59 -07:00
2026-05-23 10:21:59 -07:00
2026-05-18 20:55:57 -07:00
2026-05-14 19:13:14 -07:00
2026-05-22 21:04:30 -07:00
2026-05-22 21:04:30 -07:00
2026-05-21 08:29:55 -07:00
2026-04-29 22:21:07 -07:00
2026-05-23 10:21:59 -07:00
2026-05-14 19:13:14 -07:00
2026-05-06 21:14:34 -07:00
2026-05-06 21:14:34 -07:00
2026-05-23 08:49:28 -07:00
2026-05-23 10:21:59 -07:00
2026-04-22 16:24:23 -07:00
2026-05-06 11:54:06 -07:00
2026-05-09 22:58:19 -07:00
2026-05-03 20:41:39 -07:00
2026-05-19 17:14:53 -07:00
2026-04-22 16:24:23 -07:00
2026-04-29 22:21:07 -07:00
2026-04-29 22:21:07 -07:00
2026-04-29 22:21:07 -07:00
2026-04-29 22:21:07 -07:00
2026-05-17 14:02:45 -07:00
2026-04-13 07:49:13 -10:00
2026-05-17 08:51:33 -07:00
2026-04-21 21:14:17 -07:00
2026-04-21 21:14:17 -07:00
2026-05-21 08:29:55 -07:00
2026-05-08 17:07:51 -07:00
2026-04-22 01:34:22 -07:00
2026-05-22 09:10:20 -07:00
2026-05-22 09:10:20 -07:00
2026-04-09 10:17:13 -07:00
2026-05-17 14:27:31 -07:00
2026-05-06 11:54:06 -07:00
2026-05-14 21:06:42 -07:00
2026-05-18 19:34:44 -07:00
2026-05-23 10:57:32 -07:00
2026-04-25 12:25:34 -07:00
2026-04-29 22:53:41 -07:00
2026-04-25 12:25:34 -07:00
2026-05-09 20:46:34 -07:00
2026-04-29 22:53:41 -07:00
2026-04-25 12:25:34 -07:00
2026-05-23 10:21:59 -07:00
2026-05-21 08:29:55 -07:00
2026-05-09 21:18:53 -07:00
2026-05-18 20:55:57 -07:00
2026-05-10 06:34:40 -07:00
2026-05-20 09:19:18 -07:00
2026-05-07 23:07:00 -07:00
2026-05-09 20:46:34 -07:00
2026-05-07 23:07:00 -07:00
2026-05-10 06:34:40 -07:00
2026-05-10 06:34:40 -07:00
2026-05-09 20:46:34 -07:00
2026-05-20 09:19:18 -07:00
2026-05-10 06:34:40 -07:00
2026-05-11 23:20:17 -07:00
2026-05-23 10:01:08 -07:00
2026-05-18 19:34:44 -07:00
2026-05-22 22:37:15 -07:00
2026-05-17 14:02:45 -07:00
2026-05-22 22:37:15 -07:00
2026-05-06 21:14:34 -07:00
2026-05-22 22:37:15 -07:00
2026-05-22 22:37:15 -07:00
2026-05-18 19:34:44 -07:00
2026-05-23 10:21:59 -07:00
2026-05-13 13:14:58 -04:00
2026-05-22 22:37:15 -07:00
2026-04-29 23:46:36 -07:00
2026-04-14 19:41:34 -10:00
2026-05-07 21:52:58 -07:00
2026-04-20 23:14:38 +08:00
2026-05-04 21:11:15 -07:00
2026-04-25 12:25:34 -07:00
2026-05-18 19:34:44 -07:00
2026-05-22 09:10:20 -07:00
2026-05-08 13:25:48 -07:00
2026-05-11 22:54:35 -07:00
2026-05-18 12:53:01 -07:00
2026-05-18 20:55:57 -07:00
2026-05-08 13:25:48 -07:00
2026-04-19 18:23:02 +08:00
2026-05-07 21:52:58 -07:00
2026-05-21 22:11:00 -07:00
2026-05-21 22:11:00 -07:00
2026-05-22 13:38:07 -07:00
2026-05-08 13:25:48 -07:00
2026-05-18 19:34:44 -07:00
2026-05-07 13:41:46 -07:00
2026-05-13 12:21:21 -04:00
2026-04-22 01:34:22 -07:00
2026-05-06 21:14:34 -07:00
2026-05-18 20:55:57 -07:00
2026-05-12 14:33:29 -07:00
2026-05-14 21:06:42 -07:00
2026-05-06 11:54:06 -07:00
2026-04-20 07:30:00 +08:00
2026-04-09 10:17:13 -07:00
2026-05-18 21:11:02 -07:00
2026-05-06 11:54:06 -07:00