|
1 | 1 | # DeLector · 德语欧标沉浸精读与考点剖析工作台 |
2 | 2 |
|
3 | 3 | <p align="center"> |
4 | | - <img src="https://img.shields.io/badge/Release-v5.7.7-blue?style=flat-square" alt="Release Version" /> |
| 4 | + <img src="https://img.shields.io/badge/Release-v5.8.0-blue?style=flat-square" alt="Release Version" /> |
5 | 5 | <img src="https://img.shields.io/badge/Python-3.10%20%7C%203.11-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python Version" /> |
6 | 6 | <img src="https://img.shields.io/badge/FastAPI-0.110+-009688?style=flat-square&logo=fastapi&logoColor=white" alt="FastAPI" /> |
7 | 7 | <img src="https://img.shields.io/badge/spaCy-German%20NLP-09A3D5?style=flat-square&logo=spacy&logoColor=white" alt="spaCy" /> |
8 | 8 | <img src="https://img.shields.io/badge/CEFR-A1~C1%20Goethe-E63946?style=flat-square" alt="CEFR Ladder" /> |
9 | 9 | <img src="https://img.shields.io/badge/AI%20Model-deepseek-brightgreen?style=flat-square" alt="AI Model" /> |
10 | | - <img src="https://img.shields.io/badge/Tests-839%2F840%20Passed-2EA44F?style=flat-square" alt="Pytest" /> |
| 10 | + <img src="https://img.shields.io/badge/Tests-883%2F884%20Passed-2EA44F?style=flat-square" alt="Pytest" /> |
11 | 11 | <img src="https://img.shields.io/badge/License-MIT-gray?style=flat-square" alt="License" /> |
12 | 12 | </p> |
13 | 13 |
|
|
20 | 20 |
|
21 | 21 | ## 📦 多平台下载发布包 (Downloads) |
22 | 22 |
|
23 | | -> ✅ **v5.7.7 四平台安装/便携包由 CI 自动构建并挂载至下方 Releases**(Windows 便携 ZIP / macOS·Linux TAR.GZ / Android arm64 APK);Go agent 预览包见 Actions artifact(`DeLector-Agent-5.7.7-*`)。**v5.5.0 起 Android 端内置 4 篇 A1/A2 分级短文(覆盖安装后打开「遇见区」即可阅读);v5.5.1 修复了「新版本已就绪」提示点不动与常驻遮挡的问题;v5.6.0 新增备考域「🎧 听力微训工坊」三模式(精听/影子跟读 · 听写诊断 · 听力填空),Android 真机 TTS 链路已点检通过;v5.7.0 新增备考域「✍️ 长难句精读工坊」——句子难度 7 维评分 + 跨语料挑长难句 + 先拆解后揭示句法树 + 入复习盒闭环;v5.7.1–5.7.3 修复长难句工坊 Android 真机 500(detail 容错 → model_copy 真根因 → `[object Object]` 渲染)+ 跨端打包兼容守卫;v5.7.4 pure 评分增强 + 前端字号优化 + 轻量分析文案 + spaCy 加载诊断端点;v5.7.5 修复诊断竞态(_loadSpacyDiag 未 await → 诊断小字不渲染);v5.7.6 修复 spaCy 诊断 error 永远为空(route 按值 import 不可变字符串 `_spacy_load_error` → getter 实时读取显示真实加载异常);v5.7.7 修复真机 spaCy E050(CI 拷模型漏了 .dist-info → `is_package()` 只认 pip 元数据判"不是包" → 连 dist-info 一起打包 + APK 探针守卫)。** |
| 23 | +> ✅ **v5.7.7 四平台安装/便携包由 CI 自动构建并挂载至下方 Releases**(Windows 便携 ZIP / macOS·Linux TAR.GZ / Android arm64 APK);Go agent 预览包见 Actions artifact(`DeLector-Agent-5.7.7-*`)。**v5.5.0 起 Android 端内置 4 篇 A1/A2 分级短文(覆盖安装后打开「遇见区」即可阅读);v5.5.1 修复了「新版本已就绪」提示点不动与常驻遮挡的问题;v5.6.0 新增备考域「🎧 听力微训工坊」三模式(精听/影子跟读 · 听写诊断 · 听力填空),Android 真机 TTS 链路已点检通过;v5.7.0 新增备考域「✍️ 长难句精读工坊」——句子难度 7 维评分 + 跨语料挑长难句 + 先拆解后揭示句法树 + 入复习盒闭环;v5.7.1–5.7.3 修复长难句工坊 Android 真机 500(detail 容错 → model_copy 真根因 → `[object Object]` 渲染)+ 跨端打包兼容守卫;v5.7.4 pure 评分增强 + 前端字号优化 + 轻量分析文案 + spaCy 加载诊断端点;v5.7.5 修复诊断竞态(_loadSpacyDiag 未 await → 诊断小字不渲染);v5.7.6 修复 spaCy 诊断 error 永远为空(route 按值 import 不可变字符串 `_spacy_load_error` → getter 实时读取显示真实加载异常);v5.7.7 修复真机 spaCy E050(CI 拷模型漏了 .dist-info → `is_package()` 只认 pip 元数据判"不是包" → 连 dist-info 一起打包 + APK 探针守卫)。**v5.8.0 ADR-0011 词库单一真相化与等级判定数据驱动正式发布(2026-09-15,PR #46):背词工作台词库改为单一数据真相(A1 704 / A2 974 / B1 1712 同契约),根除 HTML 正则解析与静默回退;前端 `normalizeWord` 幂等归一 + 一次性迁移(id/进度零丢失);scope 判定数据驱动(13/13 切片护栏零漂移);**新增 B1 档位(工作台第 5 档 + 备考域 B1 页签,1712 词)**。测试基线 **883 passed + 1 skipped**;Android 需覆盖安装 v5.8.0 生效(B1 入口 + normalizeWord 迁移)。** |
24 | 24 |
|
25 | 25 | | 平台 | 版本 | 说明 | 下载通道 | |
26 | 26 | | ------------------ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | |
27 | | -| 🪟 **Windows x64** | `v5.7.7` | 免安装 Python / 零环境依赖,解压双击 `DeLector.exe` 即可秒开 | [下载 ZIP 包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.7.7) | |
28 | | -| 🍎 **macOS** | `v5.7.7` | 解压运行 `start` 脚本,全自动启动服务与默认浏览器 | [下载 TAR.GZ 包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.7.7) | |
29 | | -| 🐧 **Linux x64** | `v5.7.7` | 全发行版通用,解压运行 `start` 即可使用 | [下载 TAR.GZ 包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.7.7) | |
30 | | -| 📱 **Android** | `v5.7.7` | 内嵌 Python 运行时与 spaCy 离线模型,单机独立运行;**支持 arm64-v8a**,CI 钉死签名 keystore 并验签(可覆盖升级)。(CI 自动构建 APK;**v4.9.0 新增背词台核心词模式(235 词 / 704 词一键切换)与导入按归一词头去重,老设备幂等回填、FSRS 进度零丢失。**) | [下载 APK 安装包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.7.7) | |
| 27 | +| 🪟 **Windows x64** | `v5.8.0` | 免安装 Python / 零环境依赖,解压双击 `DeLector.exe` 即可秒开 | [下载 ZIP 包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.8.0) | |
| 28 | +| 🍎 **macOS** | `v5.8.0` | 解压运行 `start` 脚本,全自动启动服务与默认浏览器 | [下载 TAR.GZ 包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.8.0) | |
| 29 | +| 🐧 **Linux x64** | `v5.8.0` | 全发行版通用,解压运行 `start` 即可使用 | [下载 TAR.GZ 包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.8.0) | |
| 30 | +| 📱 **Android** | `v5.8.0` | 内嵌 Python 运行时与 spaCy 离线模型,单机独立运行;**支持 arm64-v8a**,CI 钉死签名 keystore 并验签(可覆盖升级)。(CI 自动构建 APK;**v4.9.0 新增背词台核心词模式(235 词 / 704 词一键切换)与导入按归一词头去重,老设备幂等回填、FSRS 进度零丢失。**) | [下载 APK 安装包 (GitHub Releases)](https://github.com/ROM4n2/DeLector/releases/tag/v5.8.0) | |
31 | 31 |
|
32 | 32 | --- |
33 | 33 |
|
@@ -408,6 +408,8 @@ DeLector/ |
408 | 408 |
|
409 | 409 | - [x] **v5.7.7**:**真机 spaCy E050 根因修复 —— dist-info 缺失**(2026-09-15,vault-debug)——v5.7.6 诊断小字首次显示真实错误:`E050 Can't find model (md 与 sm 双模型)`。根因排查:APK 解包显示模型文件 44 项全完整、`extract_packages` 生效、spaCy import 正常——但 spaCy 3.8 的 `is_package()` 实现是 `importlib.metadata.distribution(name)`,**只认 pip 元数据(.dist-info)不碰文件系统**;CI 把 `de_core_news_sm` 包目录 `cp -r` 进 APK 时**漏拷了平级的 `de_core_news_sm-3.8.0.dist-info`** → 真机判定"不是 Python 包" → E050。用独立 venv 干净复现:仅包目录 `is_package=False + E050`;补上 dist-info 后 `is_package=True + spacy.load OK`。修法:① CI "Sync Python Backend" 步骤用 glob 定位 dist-info 并连拷进 `src/main/python`;② CI APK 探针加 `dist-info-complete` 精确守卫(v5.7.6 旧 APK 被正确拦截、新 APK 放行,本地用真实 APK 验证)。测试基线不变(纯 CI 打包层修复);Android 需覆盖安装 v5.7.7、长难句工坊从「轻量分析」切回 spaCy 完整解析。 |
410 | 410 |
|
| 411 | +- [x] **v5.8.0**:**ADR-0011 词库单一真相化 + 等级判定数据驱动正式发布**(2026-09-15,PR #46)——① 背词工作台词库改为**单一数据真相**(`delector/data/a1_workbench_dict.py` 682 词 / 213 核心 / 22 自定义,A1 704 / A2 974 / B1 1712 同契约),根除 HTML 正则解析与静默回退(服务端直接 import 数据模块,缺失抛 RuntimeError);② 四路径契约统一(9 字段集 `{id,hw,pos,gender,plural,de,zh,core,cefr}`);③ 前端 `normalizeWord` 幂等归一 + `wb.schema.v1` 一次性迁移(id/进度零丢失,merge 探针全绿);④ scope 判定数据驱动(`SCOPE_PREDICATES` + `isInScope`/`cefrOf` 唯一入口,13/13 切片护栏零漂移);⑤ **新增 B1 入口**(工作台第 5 档 + 备考域 B1 页签 + 徽标动态化,catalog `count_fn` 动态推导零硬编码)+ `/api/cards` 信封解包修复。测试基线 **883 passed + 1 skipped**(838→883 净增 44);Android 需覆盖安装 v5.8.0 生效(B1 入口 + normalizeWord 迁移)。 |
| 412 | + |
411 | 413 | - [x] **`server.py`** **拆分重构**(v4.6.4):3053 行单文件拆为 `nlp.py`(NLP/CEFR/文本分析)、`database.py`(DB/CRUD/备份)、`security.py`(SSRF/URL 安全),`server.py` 保留路由骨架。依赖图无环,319 测试全绿。 |
412 | 414 |
|
413 | 415 | - [x] **介词矩阵「已入卡」持久化**(v4.6.4):新增 `prep_saved` 表 + `GET/POST /api/prep/saved`,前端 `_prepSavedKeys` 从服务端初始化,重进矩阵段按钮状态保持。 |
|
0 commit comments