436 Commits

Author SHA1 Message Date
Aqr-K
71c2e9e3df fix(storage): retain history until target cleanup is confirmed (#7202) 2026-10-27 05:42:07 +08:00
Derrors
72d940b835 fix(storage): detect nested 115 changes with stale directory times
115 子项变化不保证推进祖先目录时间。禁用该存储的目录时间剪枝,沿用现有快照遍历、深度、分页及限流。补充 API 边界与真实轮询器回归,验证空基线、旧时间移入和重复派发。
2026-10-26 21:59:07 +08:00
jxxghp
5258e06fd7 fix(transfer): warn on unmatched custom target directory (#7159) 2026-10-23 18:23:57 +08:00
Aqr-K
f3c1449c8b fix(storage): preserve transfer contents and cleanup identities (#7142) 2026-10-23 06:51:54 +08:00
jxxghp
fa67be8e4a fix(scraping): normalize artwork and reuse downloads for aliases
Add independent alias and Fanart 4K switches, identify exact artwork names, preserve episode and season conventions, and detect missing images across case and format variants. Normalize downloaded bytes to JPEG or PNG and reuse one request with storage hard links or local upload copies.

Refs #7128
2026-10-22 09:25:42 +08:00
jxxghp
6d4ce83837 fix(types): clear host mypy debt and prevent typing regressions
严格检查全部宿主源码,清零类型错误预算并移除按模块类型豁免。
按原因、所属方法、错误码及语法指纹锁定必要兼容例外和站点类型桩,
CI 阻断新增忽略、检查范围退化、本地桩替代真实接口及新的类型错误。

修复空值、异步和供应方类型边界,保持插件与 API 兼容合同,
并补充存储、订阅、通知、Agent 和工作流边界的回归覆盖。
2026-10-21 22:03:18 +08:00
jxxghp
f090d22df2 fix(transfer): continue overwrite after target cleanup
## 问题

覆盖裁决确认旧媒体库目标存在后,洗版流程可能在实际备份前删除旧目标。恢复整理时备份步骤把旧目标和备份都不存在视为未知冲突,任务进入人工复核,暂存的新版本无法入库。

## 修复

- 备份步骤在确认旧目标已被外部删除、且备份目标也不存在时记录为无副作用跳过。
- 继续提升已完整暂存的新版本;移动整理仍在提升成功后清理源文件。
- 查询失败、两端同时存在或存在备份但状态矛盾时继续保持人工复核保护。
- 增加持久整理回归测试,覆盖覆盖裁决后旧目标被删除的场景。

## 验证

- `tests/test_transfer_safe_overwrite.py`:94 passed
- 整理执行、持久化、人工复核、提交、worker、计划测试:202 passed
- changed-file Pylint:10.00/10

Fixes #7120
2026-10-21 12:54:06 +08:00
jxxghp
6766a0516e fix(transfer): recover legacy 115 receipts and isolate cloud copies
Validate old instant-upload receipts against frozen source bytes and the original cloud file ID before source deletion. Isolate native 115 copies before renaming, verify moved object IDs, and quarantine uncertain native operations instead of replaying them. Require explicit delete success.

Refs #7099
2026-10-20 17:33:51 +08:00
jxxghp
95606bb915 fix(transfer): keep exact byte size in 115 instant upload receipts 2026-10-20 15:25:04 +08:00
秋澪Akimio
e3d32e491b feat(storage): 本地复制支持仅限关键字参数 try_reflink 并新增实验室配置项 (#7089) 2026-10-19 22:54:43 +08:00
jxxghp
9f03157977 fix(transfer): ignore timestamps in cleanup identity checks 2026-10-19 19:09:12 +08:00
秋澪Akimio
8b5e536452 feat(storage): 本地复制优先尝试写时复制(reflink)并支持自动回退 (#7082) 2026-10-19 18:01:22 +08:00
jxxghp
6e5c9d0afb fix(storage): 修复 reflink 同存储回退语义与测试稳定性 (#7081)
- transhandler: 恢复同存储 copy/move 的 elif 回退语义,不再在 item 操作未命中后重复调用远端操作
- local: reflink 空源路径直接失败,避免新增 mypy 存量债务
- tests: 管道用例改为模拟克隆,系统用例改用真实能力探测,并新增不支持时严格失败的用例
- mcp: 整理历史模式说明补充 reflink
2026-10-19 17:07:02 +08:00
秋澪Akimio
114c2cebe5 feat(storage): 本地存储增加引用链接(reflink)整理方式 (#7077) 2026-10-19 16:48:41 +08:00
JontyLee
6b107e3538 fix(filemanager): skip subitems that vanish during local listing (#7076)
本地目录列举在枚举子项后逐项 stat,条目在 listdir 与 stat 之间被移动、
删除或成为悬空软链时 FileNotFoundError 会中断整次浏览,使文件管理与
整理链路读取该目录失败。改为逐项容错,仅跳过已消失的条目。

Co-authored-by: jianlin6 <jianlin6@jianlin6-MacBookPro.local>
2026-10-19 14:28:09 +08:00
DDSRem
e0642eafa7 chore(types): reduce v3 host mypy debt (#7057)
* chore(types): clear AniList endpoint mypy debt

* chore(types): clear Douban endpoint mypy debt

* chore(types): clear recommendation endpoint mypy debt

* chore(types): clear subscription notification mypy debt

* chore(types): clear SDK string compatibility mypy debt

* chore(types): ratchet v3 host mypy across remaining files

* chore(types): reduce v3 host mypy debt and retire ledger

* chore(types): reconcile host snapshot with upstream HTTP pool

* test(types): cover host paths exposed by mypy cleanup
2026-10-18 09:37:49 +08:00
DDSRem
2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00
jxxghp
7ea9beacd3 fix(types): guard nullable U115 download stream 2026-10-17 17:40:25 +08:00
jxxghp
a36c3d7de9 Revert "fix(types): narrow U115 storage responses"
This reverts commit c4b7b3760c.
2026-10-17 17:38:34 +08:00
jxxghp
b1b6d82c33 fix(types): guard nullable AliPan streams 2026-10-17 17:17:24 +08:00
jxxghp
d8d73e2708 fix(types): guard nullable storage streams 2026-10-17 17:17:24 +08:00
jxxghp
c4b7b3760c fix(types): narrow U115 storage responses 2026-10-17 17:12:42 +08:00
jxxghp
4955b7b9ea fix: harden backend isolation and execution safety 2026-10-16 09:11:28 +08:00
jxxghp
72c8bff312 feat(music): preserve local covers and fall back after online scraping fails 2026-10-14 23:15:41 +08:00
jxxghp
c670432882 fix(transfer): preserve success on size overwrite decline (#6960) 2026-10-11 12:22:10 +08:00
freeman
f3ad81b39e style: apply safe ruff auto-fixes and exempt startup late imports
Run `ruff check app tests scripts --fix` with the configured rule set
(E4/E7/E9/F/I): import sorting (I001), f-strings without placeholders
(F541), lambda/variable/unused-import cleanups that ruff marks safe.
Nine files whose only ruff debt sits next to pre-existing pylint
import-resolution errors (lazy exports, sys.path script imports) or
whose "unused" imports are reached through attribute access by tests are
left untouched so the changed-file pylint gate and the benchmark tests
stay green; their diagnostics remain in the baseline.

app/startup/lifecycle/__init__.py and app/main.py import business
modules after cache composition, import-path and stdio setup on purpose
(the source comments document the contract), so declare E402
per-file-ignores for them instead of adding per-line noqa.

Ruff ratchet watermark drops from 498 to 100; sync the baseline fixture
and the optimization checklist figure.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-09 13:29:09 +08:00
jxxghp
db4e898005 style(monitor): normalize snapshot imports 2026-10-03 08:47:31 +08:00
jxxghp
66e791603c fix(monitor): type snapshot reconciliation state 2026-10-03 08:43:31 +08:00
jxxghp
cac298fd02 fix(monitor): keep snapshot reconciliation within complexity budget 2026-10-03 08:33:15 +08:00
ranzhigg
1965cc4de7 perf(monitor): index incremental snapshot reconciliation 2026-10-01 15:49:12 +08:00
freeman
ed0460fc8b fix(smb): keep remote snapshots complete and recoverable 2026-09-30 21:19:41 +08:00
jxxghp
0833169781 fix(smb): restore multi-share capacity and diagnose unmapped paths 2026-09-30 13:12:25 +08:00
jxxghp
ee9fbf2264 feat(smb): mount multiple shares in one storage service 2026-09-30 11:27:24 +08:00
jxxghp
61e9ef7d8e fix(transfer): organize remote downloads on the SMB server 2026-09-30 10:36:56 +08:00
jxxghp
979f625017 feat(music): recognize and archive whole-album CUE resources 2026-09-30 02:59:57 +08:00
jxxghp
512bd102ea fix(smb): clear stale state before reconnecting storage 2026-09-29 23:35:36 +08:00
InfinityPacer
313f894052 perf(memory): import storage and passkey SDKs on demand
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 03:46:22 +08:00
jxxghp
8072b7d78f Refactor application architecture and compatibility boundaries 2026-09-13 12:53:00 +08:00
jxxghp
990e3ac3ae fix(module): enhance documentation for transfer plan checkpoint method parameters 2026-09-13 12:38:20 +08:00
jxxghp
765b185d42 fix(module): add preview parameter to transfer plan checkpoint method 2026-09-13 12:33:50 +08:00
jxxghp
49cc9bc63c fix(transfer): guide manual review recovery in logs 2026-09-12 12:03:14 +08:00
jxxghp
d32d17568a fix(runtime): apply configuration changes without restart 2026-09-11 00:12:05 +08:00
jxxghp
3331ba43cd fix(transfer): settle missing library directory as planning rejection 2026-09-08 18:37:14 +08:00
jxxghp
6ae5b9d9f0 fix(transfer): preserve frozen source step identity 2026-09-07 12:20:44 +08:00
jxxghp
0528e531e3 fix(transfer): keep directory intercept intent stable 2026-09-03 16:14:58 +08:00
jxxghp
71147c1d96 feat(classification): support multi-source media rules 2026-09-03 11:51:18 +08:00
jxxghp
c4d8185d8d refactor(transfer): keep planning rejection within complexity budget 2026-09-01 07:42:53 +08:00
jxxghp
94716484b7 fix(transfer): resolve durable failure recovery issues 2026-09-01 07:11:06 +08:00
jxxghp
b4b5f82511 refactor(modules): narrow package root exports 2026-08-29 21:19:00 +08:00
jxxghp
27f357b1d2 fix(transfer): create local target before remote download (#6493) 2026-08-29 10:35:24 +08:00