root and Claude Opus 5.5
708e99746c
docs(porting): 记录网盘来源(115 / rclone)暂不做及 MP 实现备查
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 23:00:39 +08:00
root and Claude Opus 5.5
850034b87a
docs: 统一元数据缓存运行手册与 MP 差异
...
runbook/cache.md 重写为统一缓存说明(两级、策略表、过期先用旧值、同请求合并、pinned 与预热、跨进程失效、命中统计、清空);
storage.md 补新 TTL 字段;moviepilot-tmdb-cache.md / moviepilot-discover.md 记与 MP 的差异。
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 19:37:34 +08:00
root
b32d5c028a
merge: ui2/t-discover
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
# Conflicts:
# packages/adapters/src/tmdb/index.ts
2026-10-06 18:34:12 +08:00
root and Claude Opus 5.5
ce93ea3a93
feat(scripts): TMDB 多语言别名清理脚本与保留规则文档
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 18:14:54 +08:00
root and Claude Opus 5.5
27514f4985
docs(porting): MoviePilot 推荐 / 探索对照与发现页取舍
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 18:04:43 +08:00
root and Claude Opus 5.5
f200ec695f
docs: 整理时指定剧集组(runbook / MP 对照 / CHANGELOG)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 16:28:34 +08:00
root and Claude Opus 5.5
22f0f2b06a
docs: 剧集组运行手册与 MoviePilot 对照
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-06 15:49:17 +08:00
root and Claude Opus 5.5
871031d5ed
fix(scrape): 没有 TMDB id 的作品季 / 集缺元数据时照旧写占位 NFO
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-03 21:37:14 +08:00
root and Claude Opus 5.5
132f150901
docs(scrape): 按现状改写 MP 对照 §10,运行手册写覆盖方式、自动重刮与缺元数据处理
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
2026-10-03 21:04:57 +08:00
root and Claude Opus 5.5
ed083fd138
feat(subscriptions): 按 MP 收敛订阅默认值与表单
...
- 定时主动搜索默认关(DEFAULT_SEARCH_INTERVAL_HOURS = 0),新建 / 手动照常各搜一次,之后靠 RSS 与站点快照
- 多版本自动补全系统缺省改为关
- 表单:基础页 = 作品与范围、下载、洗版;收录版本、优先级、自动补全折叠到进阶页「多版本」
- 对照文档 §7.3 记录落实范围
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 22:34:48 +08:00
root and Claude Opus 5.5
9856ed8d5e
docs(porting): 订阅 MP 场景对照(第 7 节,待讨论)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 18:22:37 +08:00
root and Claude Opus 5.5
b61335eaf6
test: 测试按行为命名、server 测试统一到 test/、PG 测试分组并行
...
- server 的 src/modules/*/__tests__ 挪到 test/<模块>/;e2e 去掉 eN- 前缀,
w5a2 / v2 / search2 / *-dh1 / *-md1 / *-md2、web 的 agui3 / search2、domain 的 id2 / id3 改为按行为命名
- vitest 分三组:unit、pg(真实 PG + 假引擎,文件并行,最多 6 个)、serial(真实引擎 / worker / e2e,串行);
pg 组用例超时放宽到 60s(迁移类用例并行时排队等 schema 锁)。server 测试 615s → 约 350s
- CLAUDE.md 补测试约定;待办补 harness 去重与 continuous-series 偶发超时(疑似 Slot 评估竞争)
- ADR-004 补充:维持 Deno,记录实际只用到 --allow-run 白名单
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 16:54:04 +08:00
root and Claude Opus 5.5
b343dddbf6
docs: 清理过程文档,CHANGELOG 补齐 0.3.8–0.3.14
...
- 删除 docs/plan 下 00–18 的计划、评审、验收、发布记录与升级证据,docs/spikes 与 spikes 验证代码
(保留 spikes/movieclaw-src 本地克隆),以及 4 份一次性审查 / 调研;全部可在 ceb66f8 查到
- MP 对照移到 docs/porting/moviepilot-v3-comparison.md;经验教训改为 docs/plan/lessons.md(补第 25 条)
- docs/plan/README.md:文档放哪、当前状态、待办
- 引用改写:代码注释指向在维护的文档,其余注明已删除与 git 位置;清掉原有 6 个失效链接
- README 开头改为当前状态与入口;CHANGELOG 补齐 0.3.8–0.3.14 与工程变更
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 16:08:09 +08:00
root and Claude Opus 5.5
11ca2f01ff
chore: 一键检查、发布脚本与开发环境约定
...
- deno task test:all(scripts/test-all.sh):逐包跑完再汇总,连不上测试库直接失败,
web 用 Node 跑 vitest;deno task ci 改用它
- deno task release(scripts/release.sh):工作区不干净、CHANGELOG 无本版条目即拒绝;
打 tag、构建、只替换 app、核对健康接口版本
- deno task dev:up:起开发库并迁移到最新;开发 API 端口改 4390(4380 留给本机部署版)
- CLAUDE.md:命令、提交与发布约定、文档放哪
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-10-02 16:08:09 +08:00
root and Claude Opus 5.5
fe05138c9c
feat(settings): storage budgets and retention in settings UI, tmdbMaxSize default 5000 (INT-3)
...
- Automation section gets storage budget, retention and cache TTL cards bound to settings.storage
- Metadata section drops deprecated cache.tmdbTtlHours / cache.emptyResultTtlSec / identity.poolArchiveDays inputs
- cache.tmdbMaxSize default 256 -> 5000; migration 0051 bumps stored values still at the old default
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-29 17:46:36 +08:00
root
f30600eafc
Merge branch 'id2'
...
# Conflicts:
# packages/adapters/src/tmdb/index.ts
2026-09-29 17:42:38 +08:00
root and Claude Opus 5.5
42e08b30dc
feat(scripts): identity-reevaluate with --rollback-wrong; docs for ID-2
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-29 17:41:22 +08:00
root and Claude Opus 5.5
4f7c0a62c2
docs(runbook): storage budgets and retention runbook (CACHE-2)
...
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-29 17:16:50 +08:00
root and Claude Opus 5.5
7862573944
feat(cache): TMDB image proxy, posters, cache admin API and settings cards
...
GET /img/tmdb/{size}/{file} ported from MP ImageHelper / fetch_image
(sanitized cache path under DATA_DIR/cache/images, GLOBAL_IMAGE_CACHE
read switch, md5 ETag / 304, day-based cleanup job). Cache module adds
cache.sweep / cache.images_clean jobs and /cache/tmdb, /cache/images
list and clear endpoints. Library list/detail and the search palette
show posters with the neutral placeholder as fallback; metadata settings
get TMDB cache and image cache cards. Runbook docs/runbook/cache.md and
porting notes docs/porting/moviepilot-tmdb-cache.md.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-28 22:26:29 +08:00
root and Claude Opus 5.5
2e3c2098fd
docs: S-9 sync READMEs and porting notes with W5 code
...
- contracts README lists files.ts / auth.ts / browser.ts / redact.ts and auth:"session"
- adapters README fs row: FsProxy and the ./fsworker export
- server README: file-manager module, worker:agent and internal fsworker roles
- moviepilot-rust-transfer §7: compiled-binary fsworker and trash_item done (W5-E)
- 04 S9 row marked fixed (W6-B TOTP entry)
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-28 00:50:29 +08:00
root and Claude Opus 5.5
2e2d56184c
feat(fs): W4-E4 fsproxy hang isolation, partial sweep, replace-with-verify, TIMEOUT retry
...
- adapters/fs: FsProxy + fsworker run each file op in a killable subprocess;
progress-stall watchdog (FS_HANG_TIMEOUT_MS) for copy/hash, total timeout for
quick ops; SIGTERM -> SIGKILL -> FsError('TIMEOUT'); stat/checkRoot timeouts
never read as missing
- copyWithVerify: onExisting conflict/skip/replace (hardlink backup + atomic
rename, old file to .umt-trash or deleted), sweep stale partials before write,
document why permissions/owner are not copied
- filesMatch/filesMatchSha256 throw FsError on read failure instead of
match=false; crossDeviceMove skips redundant re-hash after sha256 copy
- FsErrorCode TIMEOUT + fsErrorClass; organize executeRecord routes fs ops
through fsproxy, retries TIMEOUT/IO up to FS_TRANSFER_MAX_ATTEMPTS then opens
a decision without deleting the record; reconcile errors no longer reported
as EEXIST
- domain: subtitle .default marker (ORGANIZE_DEFAULT_SUBTITLE_LANG) and
findOtherVersions (same season/episode/part, video only) as upgrade
disposal candidates
- scripts/bench/fs-bench.ts and benchmark record in porting doc
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-27 23:15:05 +08:00
root and Claude Opus 5.5
36dc048e89
feat(parser,sites): W5-D port title/zhconv/site parsing gaps found by MP differential
...
Title recognition (parseRelease / parseReleasePath):
- anime prefix tags (★N月新番, [国漫], 【22年日剧】), category lead bracket, `A / B` cn aliases
- `Name [01]`, `[TV 04]`, `#13`, `名称 12.mkv`, `S01 13-14`, `E13-14` episodes
- lead bracket as title vs group, trailing [Group], YTS.MX/Hall_of_C style groups, 字幕组 suffix
- `[dot.release.name][…]` unbracketing, `Season 2017` as year, leading date not airDate,
date-only parent dir does not merge as TV
- original disc: Blu-ray + AVC/HEVC/VC-1/MPEG-2 without x26x/H.26x -> BluRay-Disc
- `{[tmdbid=;type=;s=;e=]}` explicit block, bangumi/anilist ids
- bare [1080]/[5.1], DTS-HD MA5.1, £ multi-group, 合集, pinyin title -> cn from subtitle,
streaming platform table, CHS/CHT/GB/BIG5 in subtitle
zh-map: add 迴滾魷瑯臥駭; document one-to-many chars kept out.
Sites: tbody branch + header-row tightening via movieclaw-import rowSelector (18 definitions),
row-level case/hr/labels include the row itself, subtitle branch (searchType: "subtitles"),
parseSizeMp banker's rounding.
Differential snapshots regenerated; MP test sample sources registered in ledger.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-27 23:09:14 +08:00
root and Claude Opus 5.5
591cc78c7d
test(porting): differential tests against MoviePilot Rust-accelerated parsers
...
Snapshot differential tests (known deviations registered, current state passes):
- title/path recognition: 216 samples vs MP MetaInfo/MetaInfoPath
- filter rules: 42 rules x 28 torrents vs MP FilterModule
- RSS/indexer parsing: 15 feeds, 72 indexer samples
- zhconv: 69 samples
Generator: scripts/mp-sync/gen-differential.py; report: docs/porting/mp-rust-logic-parity.md
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-27 22:44:11 +08:00
root and Claude Fable 5.1
3665daaf07
docs: MoviePilot subscription ledger and gap analysis
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 22:36:17 +08:00
root and Claude Fable 5.1
23309042dc
docs: MoviePilot file manager study and our file manager spec
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 22:34:13 +08:00
root and Claude Fable 5.1
79cdd26457
docs(porting): MoviePilot Rust module scope and transfer semantics comparison
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 22:20:01 +08:00
root and Claude Opus 5.5
d9f2af2f3c
feat(adapters): port MoviePilot open site framework (7 spiders, 20 user parsers) + MovieClaw v0.27.0 site definitions + mp-sync tools (W1-3c)
...
- sites/spiders: Haidan/HDDolby/RousiPro/SunnyPT/TNode/TorrentLeech/Yema (+mTorrent wrapper), specialized SiteAdapter, indirect download resolved at download time
- sites/user-parsers: SiteParserBase + all 20 MP SiteSchema parsers (lxml XPath via xpath+xmldom), refreshSiteUserData with schema fallback
- sites/definitions: zod SiteDefinition schemas, 23 MovieClaw v0.27.0 (MIT) definitions via scripts/mp-sync/movieclaw-import.mjs, registry getSiteDefinition/listSiteDefinitions, NOTICE
- scripts/mp-sync: ledger.json (upstream sha256), check.mjs, build-ledger.mjs; docs/porting/mp-sync-ledger.md
- license-and-provenance: add copied-mit kind, re-anchor MovieClaw rows to v0.27.0
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-09-27 18:39:27 +08:00
root and Claude Fable 5.1
fe3613ee8f
docs(porting): MovieClaw v0.27.0 MIT asset assessment
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 18:19:46 +08:00
root and Claude Fable 5.1
a6d049db81
feat(adapters): RSS and PT site adapters ported from MoviePilot v3 + mocks (W1-3b)
...
- rss: port of MP RssHelper._parse_impl/get_rss_link semantics with safe
XML (entities off, DTD/ENTITY rejected, size/item caps), ETag/Last-Modified,
backoff + Retry-After, circuit breaker with manual reset, passkey redaction,
overlap-window GUID+digest dedupe
- sites/spider: TS port of MP SiteSpider (indexer schema, search URL builder,
field DSL, filters, Jinja templates via nunjucks, login-page detection);
audiences definition hand-written as JSON; raw category id preserved;
shared per-site token bucket
- sites/mteam: port of MP MTorrentSpider (params, result mapping, promo
factors, genDlToken flow) without embedding the API key in enclosures;
business code/message checks
- testkit: mock RSS server, mock NexusPHP site, mock M-Team API
- docs: W1-3b migration mapping appended to porting ledger
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 18:10:34 +08:00
root and Claude Fable 5.1
ef2e504a94
feat(adapters): qBittorrent, filesystem, TMDB and Emby adapters with testkit mocks (W1-3a)
...
- qbittorrent: WebUI API v2 client (cookie/API-key auth, add/info/files/filePrio,
pause/resume with 5.x stop/start fallback, tags, delete with explicit deleteFiles,
maindata), error classes, idempotent submit with local infohash (own bencode)
and post-timeout hash/probe-tag lookup; state mapping per MoviePilot
- fs: copyWithVerify (tmp + fsync + size/sha256/sample + no-clobber commit),
moveSafe (EXDEV surfaced), resumable crossDeviceMove, statSafe/checkRoot with
root sentinel, budgeted incremental scan with cursor, ffprobe, statfs usage
- tmdb: multi-language search/details/seasons, LRU+TTL cache with coalescing,
rate-limit backoff, MoviePilot match chain (name normalization, year +-1)
- emby: Emby/Jellyfin items/seasons/episodes/MediaSources, failures -> unknown
- testkit: mock qB / TMDB / Emby servers, torrent builder, temp-tree fixtures
- docs: W1-3a porting table appended to downloader-and-sites ledger
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 18:07:48 +08:00
root and Claude Fable 5.1
8b90d396b2
docs(porting): MoviePilot/MovieClaw porting ledger (W0-C)
...
Co-Authored-By: Claude Fable 5.1 <[email protected] >
2026-09-27 17:37:14 +08:00