Commit Graph
88 Commits
Author SHA1 Message Date
bot-ci f408da93c2 feat(scheduler): persist task state/progress/due_at across restart (#8)
Replace process-start next_run=0 guesses with kv task:state records
(status, due_at, stat_date, progress). Startup recovers stale running,
honors future due_at for delayed retries, and resumes the same
stat_date. Seed only enqueues evening seal; seal force keeps non-seed
ok=1 as progress (keep_scraped). Keeps !7 fail-logging and cleanup retry.
2026-11-03 01:50:00 +08:00
bot-ci 51ffa44577 fix(scheduler): do not force full snapshot on post-seed restart
Schedule snapshot_seed/snapshot/fans to the next wall-clock seed_at /
snapshot_at on process start (optionally from last task record), instead
of next_run=0. Force-seal of seed shells only after today's snapshot_at
(or CLI --force), so a daytime restart cannot scrape the whole site.
2026-11-03 01:09:50 +08:00
bot-ci 1697573d95 fix(scheduler): address !7 REQUEST_CHANGES
- seed: check completed_key before no_source so same-day last_completed
  is already_completed (not 10m retry)
- scheduler: resolve TaskControl ok/error before logging; ok=False logs
  task_fail, not task_ok
- candidate_cleanup: catch failures, record task, retry ~5m like discover
2026-11-03 01:08:34 +08:00
bot-ci bb18d232f6 feat(scheduler): add snapshot-seed CLI and 10m seed deferral
Add `python app.py snapshot-seed [--date]` (offline clone, Debian /
docker compose exec friendly). When seed fires while full-site snapshot
is running, or last_completed is missing (no_source), record skip as
non-success and retry in 10 minutes until a real seed succeeds; fans
and quiet-window rules unchanged.
2026-11-03 00:22:11 +08:00
bot-ci 9969e65202 fix(scheduler): drop cross-task mutex, quiet window + retry
Incident: evening full snapshot could be recorded as ok with
already_completed/elapsed=0 after mutual skip with hourly sync, then
next_run jumped to the next day.

- Full-site snapshot never skips because another task is running
- 23:00-01:00 Asia/Shanghai: defer discovery / snapshot_recent /
  candidate_cleanup to after 01:00; fans never defers
- Skip records ok=false + skipped=true (not success / not completed)
- Skip/fail reschedule soon (~5m); daily success still next snapshot_at
- TaskControl return value drives next_run; system UI shows skip fields
2026-11-03 00:07:19 +08:00
kairee 00572a3429 fix(growth): require a 1000-view baseline on the rate board
Keep small-base videos on the delta board only, and raise the smoothing prior to 1000 so videos that just clear the floor do not dominate the ranking.
2026-11-02 22:11:30 +08:00
kairee 39a6537f67 fix(growth): rank the rate board by a smoothed score
Show the real percentage on the card, but sort with delta / (baseline + prior) so a small baseline cannot dominate. Same-day publishes stay off the rate board.
2026-11-02 22:06:41 +08:00
kairee 0f2ac612f5 fix(ui): widen mobile video-card cover so duration stays on the thumbnail 2026-11-02 21:39:06 +08:00
kairee 9412475473 Merge branch 'main' into cursor/same-day-growth-baseline 2026-11-02 20:45:30 +08:00
kairee c5b7185675 feat(growth): same-day 1-day baselines for new videos
Let 1-day view growth use a zero baseline for videos published today, and the first successful sample for older videos ingested today, without mixing those into 7/30-day rankings.
2026-11-02 20:44:17 +08:00
bot-ci 3254648849 fix(system): sort recent tasks by started_at desc
「最近任务」原先按 kv 键名排序。改为后端 `_task_records` 按
started_at 倒序写入 dict(缺开始时间排末尾,含进行中);
前端不再参与排序。配套 test_system_tasks_sorted_by_started_at_desc。
2026-11-02 19:52:46 +08:00
bot-ci 8e7ead1669 feat: switch config to JSONC + split secrets.json
Load business config as JSONC (comments + trailing commas) via an
in-repo stripper then stdlib json — no new deps. Default path prefers
config.jsonc, falls back to legacy config.json. Auth write-back targets
only sibling secrets.json so JSONC comments are never wiped; secrets
overlay merges on load. Examples, compose, Docker, docs, favsort and
tools all share the same loader. Phase A only — no DB settings migration.
2026-11-02 12:58:20 +08:00
bot-ci 25cdea5287 fix: default seed_at to 00:00 (HH:MM)
Keep daily tasks next_run=0 startup catch-up; only move midnight
seed schedule default from 00:01 to 00:00 across config/docs/tests.
2026-11-02 12:44:40 +08:00
bot-ci 8a9cb21408 feat: EOD 23:15 seal + midnight seed shell for video/fans
Move daily snapshot/fans to 23:15 and add 00:01 seed that clones
last_completed ok=1 rows into today without advancing completed.
Evening runs force through seed markers; growth previous is per-aid
adjacent. Home shows short-update clock + 全站数据 date, and 收录视频
counts.
2026-11-02 12:38:55 +08:00
kairee 374b138041 feat(ui): densify home and ranking video cards
Drop nested home panels, overlay rank and duration on covers, and keep
metrics fully visible by moving dates onto the author row.
2026-11-02 12:19:30 +08:00
kairee 2641ba6f87 feat(auth): print a scannable ASCII QR in the terminal
WSL and --no-browser never showed the PNG, and placeholder Chinese cookies crashed urllib latin-1 headers before the code was issued.
2026-11-02 10:35:56 +08:00
bot-ci 297d9279d8 fix(home): server-owned growth window; expose days
Home omits growth_days; backend auto (or home_growth_days 1/7) picks
the window. Response includes days alongside growth_days. Growth榜 link
uses the returned days. Non-growth sorts treat omitted/auto as 7.
2026-11-02 10:05:00 +08:00
bot-ci 9163f47b76 feat: home growth auto(7→1) and hourly recent-video snapshot
- Add analytics.home_growth_days (auto|1|7); API growth_days=auto tries 7 then 1
- Homepage shows active window and growth-board link; clearer empty reason
- New snapshot_recent scheduler task (schedule.recent_snapshot_minutes/days)
- run_recent_videos refreshes new aids only; never touches completed/backup
- Full 00:01 job keeps ok=1 skip (covers hourly refresh within 1h); mutex with recent
2026-11-02 10:00:02 +08:00
bot-ci af90ce8f87 fix(system): three next-runs, completed-date data_date, running mark
Split /system schedule into fans / snapshot+UP / discovery next-runs.
Drive data_date and snapshot_days from fully completed video snapshots
only, keep prior success date on failure, show task failure records, and
mark in-progress tasks as 运行中 without wall-clock next-run jumps.
2026-11-02 00:46:20 +08:00
kairee 0b92e10317 feat(ui): implement dark/light theme switch 2026-11-01 23:29:14 +08:00
kairee 1b76fdeda1 refactor: optimize video & upper rank page 2026-11-01 23:18:39 +08:00
kairee 4a9c37f2f3 feat(telegram): candidate list/delete/clear commands
私聊新增 /candidate [页码](待决策列表)、/candi_del(标题按钮逐条删除,删后原地重建键盘、可翻页连续删)、/candi_clear(全部/待决策/取消)。重构 handle_callback 为前缀分派(cdel/cpage/cclr,保留 add/ign/blk/fav);repository 加 list_pending_candidates/delete_all_candidates;LibraryService 加 pending_candidates/delete_candidate/clear_candidates 并刷看板缓存。
2026-11-01 20:45:57 +08:00
kairee c6790f0ba1 feat(classify): zero title-only titles, penalize <10min, add discover.candidate_min_score
标题仅含 require_title 不再计分(必须咻咻满+任一正向词);时长 <10 分钟 -1(时长未知不扣);新增 discover.candidate_min_score(默认=notify.min_score)控制是否进候选池,只过标题关的不再入池。库内 796 条:仅过标题关的 8 条从 1/3 分降为 0/-1,其余不变。
2026-11-01 20:18:43 +08:00
kairee aa9aa7c589 feat(classify): gate loose re token, non-linear negatives, drop 纯享/转场
reaction 词表用 re|reaction|反应 但须与咻咻满或充电同现,兼容 reactio/reation 等拼写又避免通用词加分;负向改为每词 -2 且命中多条额外叠加(k*(k-1)),日期 -4;纯享(误伤纯享受)移出负向,转场移出正向。库内 796 条有效视频复测:线以下由 14 降至 8。
2026-11-01 19:18:20 +08:00
kairee 337e379514 feat(classify): super-linear positive weighting by hit count
正向改为按命中次数 n(require_title + reaction + charge + weak)做平方加权,使多信号同现的真 reaction 不被单个负向词打穿(1+1>2、1+1+1>5);标题不含 require_title 直接 0 分。库内 796 条有效视频复测:线以下误伤由 47 降至 14。
2026-11-01 19:08:59 +08:00
kairee 742c67a1c3 feat(classify): tighten scoring with reaction co-occurrence and date negatives
强正向 reaction 需标题同时含 require_title;移除听/看等宽泛词,新增弱正向组;charge 命中>=2 记+3、==1 记+1;负向补充录播/录像并新增标题带日期强负向;时长仅在已命中 reaction/charge 时加权;discover 关键词改为单个咻咻满、pages=3、window_days=7,notify.min_score=4;同步示例配置、project.md/README 与相关测试。
2026-11-01 19:00:48 +08:00
kairee 003e65086e fix(web): up list search matches up name only, not video titles 2026-11-01 17:57:34 +08:00
kairee ff88e91640 feat(web): restore candidate notice on home for logged-in users 2026-11-01 17:52:03 +08:00
kairee f96781027e fix(web): keep sidebar brand text intact, stack topbar entries below 2026-11-01 17:48:18 +08:00
kairee bc4655c143 feat(web): drop redundant preview pill from topbar 2026-11-01 17:45:25 +08:00
kairee 3cb9b92361 feat(web): move candidates/system nav to topbar, free mobile bottom nav 2026-11-01 17:43:42 +08:00
kairee 85b0f625a9 feat(web): clean public home header (data date, 7d fans, video count), drop status panel 2026-11-01 17:38:30 +08:00
kairee 14a4cab48b feat(web): home media grid 2-up mobile / 3-up PC, 6 items, drop folder panel 2026-11-01 17:30:52 +08:00
kairee e00331c4c6 feat(web): home media sections use 5-up PC / 1-up mobile grid, growth top5 2026-11-01 17:27:10 +08:00
kairee e40905da24 feat(web): unify home published/growth cards with heat-strip vertical layout 2026-11-01 17:18:42 +08:00
kairee 7907216c1b feat(web): add interactions-per-hour stat to up page 2026-11-01 17:09:25 +08:00
kairee 84ce1e41e8 feat(web): visit 204 response, up page header/sort, trim system page 2026-11-01 17:06:26 +08:00
kairee e3bd2e601b fix(web): always drain visit request body to keep keep-alive connections aligned 2026-11-01 15:41:47 +08:00
kairee b215f8eb09 feat(web): report page views via sendBeacon and show stats on system page 2026-11-01 15:36:42 +08:00
kairee 3c16caac1a feat(stats): buffer visits in memory and expose POST /api/visit + /api/stats 2026-11-01 15:34:53 +08:00
kairee cdd11823b9 feat(stats): add migration v7 visit table and client-ip helpers 2026-11-01 15:29:43 +08:00
kairee b0c53e8a2f fix(ingest): raise ref cap to 50 and clarify invalid bvid error 2026-11-01 15:05:17 +08:00
kairee b5bf7d9b8f feat(web): drop decoupled folder badge from video detail 2026-11-01 14:45:28 +08:00
kairee 5d7521075a feat(web): show first-RE time on up page, drop decoupled folder badges 2026-11-01 14:41:32 +08:00
kairee 2ff3e7952b feat(web): up avatars, follower count, and dedupe views/avg secondary 2026-11-01 14:34:23 +08:00
kairee 1ed3746f4b feat(web): clickable home stats, drop recent-ingest panel, rename watch link 2026-11-01 14:19:27 +08:00
kairee bfde231b90 feat(cli): capture up follower on manual ingest 2026-11-01 14:10:05 +08:00
kairee 6c4287b43a refactor(sync): drop favorite-folder tracking and deal 2026-11-01 13:59:10 +08:00
kairee 62abbd7ea1 feat(ingest): db-only library ingest and telegram manual ingest 2026-11-01 13:50:03 +08:00
kairee d2adb65e08 feat(ingest): parse video refs and fetch detail by bvid 2026-11-01 13:46:46 +08:00