feat(12-02): add refresh_cloud_folder Celery task, staleness trigger, version 0.1.5

- Add tasks/cloud_tasks.py: durable refresh_cloud_folder task with 3-retry
  bounded backoff (30s/90s/270s +jitter), credential decryption in worker only
- Register tasks.cloud_tasks.* on documents queue in celery_app.py
- Add stale-while-revalidate staleness trigger in browse.py (5-min threshold)
- Add 4 Task 3 tests: idempotency, cached-row retention on failure, task structure,
  no-byte-download contract; add background-refresh scheduling integration test
- Bump backend version 0.1.4 → 0.1.5, frontend package.json 0.1.4 → 0.1.5
- Update AGENTS.md with Phase 12 Plan 02 state and new shared module map entries
- Update README with connection-ID browse API table and v0.1.5
This commit is contained in:
curo1305
2026-06-18 23:17:34 +02:00
parent e186019066
commit c6237ca57f
9 changed files with 735 additions and 6 deletions
+9 -2
View File
@@ -245,11 +245,18 @@ async def browse_connection_items(
for action in ACTIONS
}
# Refresh in background if first visit (no items) or stale
# Refresh in background if first visit (no items), currently refreshing,
# never refreshed, or stale (last refresh > 5 minutes ago)
import datetime as _dt
_stale_threshold = _dt.timedelta(minutes=5)
_is_stale = (
folder_state.last_refreshed_at is None
or (_dt.datetime.now(_dt.timezone.utc) - folder_state.last_refreshed_at) > _stale_threshold
)
should_refresh = (
not cached_items
or folder_state.refresh_state in ("refreshing",)
or folder_state.last_refreshed_at is None
or _is_stale
)
if should_refresh and not cached_items:
# First visit: do a synchronous bounded fetch so user sees content