بنقرة واحدة
backup-consistency-check
检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
通过对比 entities、schema JSON 和迁移方案,诊断并修复 Android Room 数据库在 entity 或 database 变更后的 schema 校验崩溃;增加数据库版本号,添加重命名/新增/删除列的迁移,并验证生成的 Room 代码。
优化Markdown文件中的ASCII流程图,使其更适合手机显示。将宽大的ASCII边框图转换为紧凑的树形结构。当用户要求修复流程图在手机上的显示问题时调用。
分析 Compose 界面是否使用了项目中可复用的组件和主题系统。适用于检查 Compose 屏幕是否符合项目规范或需要重构以使用共享组件。
Legado Plus 模块学习讲解器。当用户想学习某个模块、询问模块功能、请求讲解代码架构时调用。提供生动详尽的模块讲解,包括架构图、代码走读、实践任务。
Critical Android code review for Payoo Android app. Focuses on high-impact issues - naming conventions, memory leaks, UIState patterns, business logic placement, lifecycle management, and MVI/MVVM pattern violations. Use when reviewing Kotlin files, pull requests, or checking ViewModels, Activities, Fragments, UseCases, and Repositories.
安卓原生模块学习讲解器。当用户想学习某个模块、询问模块功能、请求讲解代码架构时调用。提供生动详尽的模块讲解,包括架构图、代码走读、实践任务。
| name | backup-consistency-check |
| description | 检查备份系统中选择器、备份逻辑、恢复逻辑、备份信息显示之间的数据一致性。当用户问备份对不对、备份选漏了没、恢复和备份匹配吗、备份信息准不准时调用。 |
自动对比备份系统中多个位置定义的备份项,找出不匹配、遗漏、多余的问题。
备份系统有 5 个关键位置 定义了"要备份/恢复/显示哪些东西",它们之间必须保持一致:
| 编号 | 位置 | 文件 | 作用 |
|---|---|---|---|
| ① | 实际备份逻辑 | app/src/main/java/io/legado/app/help/storage/Backup.kt | 真正执行备份,导出哪些文件 |
| ② | 备份选择器 | app/src/main/java/io/legado/app/help/storage/BackupSelectorConfig.kt | 用户在 UI 上可以选择备份哪些项 |
| ③ | 安卓端备份信息 | app/src/main/java/io/legado/app/help/storage/BackupInfoHelper.kt | 安卓端"查看备份信息"弹窗展示 |
| ④ | Web端备份信息 | app/src/main/java/io/legado/app/api/controller/BackupController.kt | Web端备份概览页面展示 |
| ⑤ | 恢复逻辑 | app/src/main/java/io/legado/app/help/storage/Restore.kt | 从备份中恢复哪些文件 |
逐一读取以下 5 个文件,提取每个文件中定义的备份项列表(文件名 + 显示名):
读取 backupFileNames 数组(约第 105-130 行),提取所有文件名字符串。
同时读取 backup() 方法(约第 351-562 行),检查:
selectedFiles.contains(xxx) 的条件分支,确认实际写了哪些文件backupFileNames 中但 backup() 里没有导出逻辑backup() 里导出了但不在 backupFileNames 中读取 allItems 列表(约第 20-44 行),提取每个 BackupItem 的:
key(唯一标识)fileName(文件名)title(显示名)group(分组)读取 displayNameMap(约第 51-73 行),提取文件名到显示名的映射。
读取 getBackupOverview() 方法(约第 81-156 行),提取:
dbItems 列表中的所有文件名configFiles 列表中的所有文件名DirectLinkUpload.ruleFileName)读取 generateBackupOverview() 方法(约第 301-415 行),提取:
backupItems 列表中的所有 BackupItemDefconfigItems 列表中的所有 ConfigItemDef读取 restoreSelectedFiles() 方法(约第 188-456 行)和 restore() 方法(约第 469-700+ 行),提取:
if ("xxx.json" in selectedSet) 或 if ("xxx.xml" in selectedSet) 的条件将提取到的 5 个列表汇总成一张对比表,格式如下:
| 文件名 | ① 备份逻辑 | ② 选择器 | ③ 安卓信息 | ④ Web信息 | ⑤ 恢复逻辑 | 状态 |
|--------|:---------:|:-------:|:---------:|:--------:|:---------:|:----:|
| bookshelf.json | ✅ | ✅ | ✅ | ✅ | ✅ | OK |
| xxx.json | ✅ | ❌ | ✅ | ❌ | ✅ | 不一致 |
对每个文件名检查它在 5 个位置是否都出现,按以下规则分类:
单独检查 BackupInfoHelper.kt 的 displayNameMap:
getBackupOverview() 中出现的文件名检查 BackupInfoHelper.kt 的 categoryConfig 分类规则:
按照以下格式输出最终报告:
## 备份一致性检查报告
### 对比矩阵
(完整的 5 列对比表)
### 发现的问题
#### ❌ 严重问题
(功能上会导致数据丢失或误导用户的问题)
#### ⚠️ 一般问题
(逻辑不一致但不影响功能的问题)
#### 💡 建议
(可优化的点)
### 修复建议
(针对每个问题给出具体的修复方案)
app/src/main/java/io/legado/app/help/storage/Backup.kt
app/src/main/java/io/legado/app/help/storage/BackupSelectorConfig.kt
app/src/main/java/io/legado/app/help/storage/BackupInfoHelper.kt
app/src/main/java/io/legado/app/help/storage/Restore.kt
app/src/main/java/io/legado/app/api/controller/BackupController.kt
DirectLinkUpload.ruleFileName 是动态值(运行时常量),不是字符串字面量,提取时需注意ReadBookConfig.configFileName、ReadBookConfig.shareConfigFileName、ThemeConfig.configFileName、BookCover.configFileName 同理,需在代码中找到实际值readRecordSession.json 是一个特殊的灰色地带:Restore 会尝试读取它,但 Backup 从不导出它bg 目录)是文件级备份,不是 JSON,需要单独关注runtimeSourceCache.json 只在 BackupConfig.fullBackup 为 true 时才会备份backupFileNames 和 backup() 方法可能不完全同步——两个地方都需检查