dev→main: cursor-paged Patreon backfill + mobile modal fixes #70

Merged
bvandeusen merged 2 commits from dev into main 2026-06-05 11:10:02 -04:00
Owner

Two changes on dev since v26.06.04.0. Dev CI green at head add1c1a (run #554).

feat(download): cursor-paged Patreon backfill (593f65c, plan #689)
Large Patreon catalogs (Anduo: thousands of files) couldn't backfill — each run re-walked newest→oldest from the top and timed out during the HEAD walk with 0 files written, no progress (event #40411). Now each run checkpoints gallery-dl's pagination cursor (survives a timed-out run via the partial-output path) and resumes from it, staying in backfill mode across ticks until the walk reaches bottom; a 2-strike stuck-guard prevents an infinite re-strand. patreon-only; cursor stored in config_overrides (no migration); time-budget ladder unchanged.

fix(modal): mobile UX (add1c1a)

  • Tag input no longer autofocuses on the ≤900px stacked layout (it popped the soft keyboard and pushed the image/controls out of view).
  • Stacked layout now scrolls with the image pane pinned sticky at the top, so the image + prev/next/close + integrity badge stay visible while the metadata panel scrolls beneath.

🤖 Generated with Claude Code

Two changes on dev since v26.06.04.0. Dev CI green at head `add1c1a` (run #554). **feat(download): cursor-paged Patreon backfill** (`593f65c`, plan #689) Large Patreon catalogs (Anduo: thousands of files) couldn't backfill — each run re-walked newest→oldest from the top and timed out during the HEAD walk with 0 files written, no progress (event #40411). Now each run checkpoints gallery-dl's pagination cursor (survives a timed-out run via the partial-output path) and resumes from it, staying in backfill mode across ticks until the walk reaches bottom; a 2-strike stuck-guard prevents an infinite re-strand. patreon-only; cursor stored in `config_overrides` (no migration); time-budget ladder unchanged. **fix(modal): mobile UX** (`add1c1a`) - Tag input no longer autofocuses on the ≤900px stacked layout (it popped the soft keyboard and pushed the image/controls out of view). - Stacked layout now scrolls with the image pane pinned sticky at the top, so the image + prev/next/close + integrity badge stay visible while the metadata panel scrolls beneath. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bvandeusen added 2 commits 2026-06-05 11:09:55 -04:00
feat(download): cursor-paged Patreon backfill for large catalogs
CI / lint (push) Successful in 2s
CI / backend-lint-and-test (push) Successful in 11s
CI / frontend-build (push) Successful in 25s
CI / integration (push) Successful in 2m57s
593f65c9cc
Large Patreon creators (Anduo: weekly 50-120-image Reports back months =
thousands of files) couldn't backfill: each run re-walked newest→oldest
from the top, and gallery-dl's polite ~0.75s/request HEAD walk alone
exceeded the 1170s subprocess budget, so the run died during enumeration
with 0 files written and NO forward progress — re-stranding every time
(event #40411).

Checkpoint gallery-dl's pagination cursor so each backfill window advances
the frontier:

- gallery_dl.py: SourceConfig.resume_cursor; _build_config_for_source sets
  extractor.patreon.cursor=<resume> (PLATFORM_DEFAULTS leave log-only True
  for a fresh run); parse_last_cursor() pulls the last emitted
  'Cursor: <token>' from stdout+stderr — survives a timed-out run since the
  TimeoutExpired path returns partial output.
- download_service.py: phase2 stays in BACKFILL mode while a cursor is
  pending (even after the run budget drains) and threads resume_cursor;
  _apply_backfill_lifecycle() checkpoints the advancing cursor each
  non-completing run, completes on a clean rc=0 finish (walk reached
  bottom), and a stuck-guard clears the cursor after 2 non-advancing runs
  so a wedged walk can't re-strand forever.

patreon-only (sole platform with a resumable cursor); other platforms keep
the simple counter semantics. Cursor state lives in config_overrides JSON
(patreon_campaign_id precedent) — no migration. Time-budget ladder
(1170/1350/1500) unchanged.

Plan #689.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(modal): mobile — no tag autofocus + sticky image over scrolling panel
CI / lint (push) Successful in 3s
CI / backend-lint-and-test (push) Successful in 11s
CI / frontend-build (push) Successful in 24s
CI / integration (push) Successful in 2m58s
add1c1ad14
Operator-flagged 2026-06-05 (mobile):
- TagAutocomplete no longer autofocuses on the ≤900px stacked layout —
  focusing popped the soft keyboard, shrinking the viewport and shoving the
  pinned image + nav/close controls out of view. matchMedia gate (safe on
  plain HTTP); desktop autofocus unchanged.
- ImageViewer stacked layout: the body now scrolls and the media pane is
  sticky (height:55vh, top:0), so the image + prev/next/close + integrity
  badge stay pinned while the metadata panel scrolls beneath. Replaces the
  old fixed image + 40vh internally-scrolled panel that could push the
  controls off. Prev/next re-centered over the image band; opaque obsidian
  bg so the scrolling panel doesn't bleed through.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bvandeusen merged commit 575d817919 into main 2026-06-05 11:10:02 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bvandeusen/FabledCurator#70