Releases: Helio-RC/A_Pair
Releases · Helio-RC/A_Pair
A_Pair v1.1.0 更多内置策略🎉
A_Pair v1.1.0 Release
概述
v1.1.0 是一次重大架构升级,重新设计了座位分配策略系统,新增插件多策略包支持,并进行了全面的代码质量提升。共 140 个文件变更,49 个提交。
🏗️ 策略管道重构
双轨制架构
策略系统从单一管道模型升级为独立策略 + 依赖策略双轨制:
- 独立策略 (
ISeatingStrategy) — 在外部管道中按 Priority 降序执行,负责通用填充逻辑 - 依赖策略 (
IDependentSeatingStrategy) — 在 RandomFill 的每次随机分配循环内评估,支持 Approve / Reject / Handled 三态响应
新增 3 个策略
| 策略 | 类型 | 功能 |
|---|---|---|
| 性别限制座位 | 依赖 | 座位级性别限制,不匹配时自动重定向到匹配空座 |
| 同桌不重复 | 依赖 | 基于历史快照防止过去同桌再次相邻 |
| 碎片整理 | 独立 | 后置处理,将后排无约束学生前移,减小座位分散度 |
DeskMate 同桌策略重写
从独立策略改为依赖策略,新增三级协调分配:
- 层级 1 — 相邻空座充足 → 直接分配全部组员
- 层级 2 — 空座不足 → 腾挪相邻非固定占座者,释放座位
- 层级 3 — 腾挪后仍不足 → 部分分配 + 警告,不再拆散
🔌 插件系统重写
多策略插件包
从单清单架构升级为双层清单:
Plugins/{packageId}/
├── plugins-manifest.json ← 包级清单
├── strategy_a/
│ ├── manifest.json ← 策略元数据
│ └── strategy.dll
├── strategy_b/
│ ├── manifest.json
│ └── strategy.lua
└── data/
└── enables.json ← 运行时启用状态
新功能
- 包级 + 策略级独立启用/禁用
- 热加载/卸载单个包
- 插件配置通过
PluginPackageConfigService读写 - ZIP 安全防护(条目数/压缩比/路径遍历检查)
🧠 历史感知
两个新的历史加载器使策略支持跨会话记忆:
- 前排轮换历史 — 从快照恢复学生的前排座位历史,惩罚权重跨会话生效
- 同桌不重复历史 — 提取过去快照中的同桌对,防止重复相邻
🖥️ UI 增强
- 策略配置页重构:独立/依赖策略分组展示,竖线层级指示器
- 新增加载中遮罩、参数编辑器、代码块编辑器
- 座位安排页新增加策略消息面板(错误/警告可折叠)和修改历史时间线
- 全面采用 C# 13 partial 属性语法
🔧 代码质量(Review 阶段修复)
| 类别 | 数量 | 要点 |
|---|---|---|
| 正确性 | 6 | CircularHistory 去重、配置读写路径统一、TryAssignSeat 历史参数、await 化保存 |
| 安全 | 2 | ZIP 路径遍历防护(PluginManager + SDK) |
| 性能 | 2 | JsonSerializerOptions 静态池(消除 14 处分配)、GetStrategiesAsync 30s 缓存 |
| 分析器 | 40+ | CA1816 / CA1869 / CA2016 / IDE0059 / IDE0060 / IDE0075 / IDE0350 / MVVMTK0042 |
| 测试 | +1 | 新增 ZIP 路径遍历安全测试 |
📊 统计
| 指标 | 数值 |
|---|---|
| 文件变更 | 140 (+8495 / -2455) |
| 提交数 | 49 |
| 新增策略 | 3(Defrag / GenderRestrictedSeat / NoRepeatDeskMate) |
| 重写策略 | 2(DeskMate / RandomFill) |
| 新增 ADR | ADR-007(多策略插件包) |
| 测试总数 | 335 |
| 测试通过率 | 100% |
| 构建警告 | 0 |
⚠️ 破坏性变更
- 插件清单格式从
plugin.manifest.json改为plugins-manifest.json(旧格式不被识别) IPluginSeatingStrategy新增默认接口实现(Category / Version)ISeatingStrategy.Priority语义反转(高=先执行)DeskMateStrategy从独立策略改为依赖策略(不再在管道中独立运行).apairplugin扩展名改为.ap-plugin
🔄 升级指南
- 如有旧格式插件,需迁移到新的双层清单结构(参见
docs/adr/ADR-007.md) - 如自定义策略依赖 Priority 值,需反转:旧
Priority=10(先执行)→ 新Priority=90(先执行) - 所有 JSON 文件版本号已更新,打开后自动迁移
下载注意事项
版本选择
每个平台提供两种版本,文件名格式为 A_Pair-{类型}-{平台}:
| 后缀 | 类型 | 体积 | 前提 |
|---|---|---|---|
-sc- |
自包含(Self-Contained) | ~100 MB | 无需安装任何运行时,开箱即用 |
-fd- |
依赖运行时(Framework-Dependent) | ~20 MB | 需安装 .NET 10 运行时 |
文件名示例:
A_Pair-v1.1.0-self-contained-win-x64-unsigned.exe= 自包含版 · Windows 64位 · 无需装 .NET
程序未签名
当前版本尚未进行代码签名,运行时可能遇到以下情况:
- Windows:双击后 SmartScreen 弹出 "Windows 保护了你的电脑" 警告。点击「更多信息」→「仍要运行」即可。
- macOS:首次打开时提示 "无法验证开发者"。前往「系统设置 → 隐私与安全性」→ 点击「仍要打开」。
- Linux:下载后需手动赋予执行权限:
chmod +x A_Pair-sc-linux-x64-unsigned && ./A_Pair-sc-linux-x64-unsigned
后续版本计划申请代码签名证书以消除这些警告。
使用方式
- 将下载的单个可执行文件放入一个空文件夹
- 直接运行即可(程序会在同目录创建
AppData/存放配置和数据)
下载后请校验哈希值
| 文件 | SHA256 |
|---|---|
A_Pair-v1.1.0-framework-dependent-linux-x64-unsigned |
c4f710b52f346231274cbff0f3f52d854dd8232a9c672d6e7e6ee908012c4ad6 |
A_Pair-v1.1.0-framework-dependent-osx-arm64-unsigned |
76af34ec5b75f158fd202cd4032498d74b59459333385669d7b7cb5546585cbd |
A_Pair-v1.1.0-framework-dependent-osx-x64-unsigned |
b4273c78378249c82c45479fb5771fc89baf4f3bcaab31630083f0ef61cb2473 |
A_Pair-v1.1.0-framework-dependent-win-x64-unsigned.exe |
8fd8b3616f0247dfae061c027cf7ba2721f13d8eb8aac6af2758f9fd2ea697a2 |
A_Pair-v1.1.0-self-contained-linux-x64-unsigned |
8c856fa53a605ba3d8facca39b1de8d0aa6f8d76a4e32b904c49879834f337b8 |
A_Pair-v1.1.0-self-contained-osx-arm64-unsigned |
d8a3b937a0a80085b24bb6d24a167b938ab228ad3ca2a5b781189d68e99a4405 |
A_Pair-v1.1.0-self-contained-osx-x64-unsigned |
8f5cc8a9621aa5af3fd1832ffab4f138ed088e372f52cad107f13d0737eab2e7 |
A_Pair-v1.1.0-self-contained-win-x64-unsigned.exe |
1afc8d2f529c144ee50b1a7e15bdf6b625a9ee7b9eab0fecacd3e65e0f839eec |
v1.0.0 A_Pair🎉
A_Pair v1.0.0
跨平台桌面座位安排与轮换系统的首个正式版本。
下载说明
每个平台提供两种版本,文件名格式为 A_Pair-{类型}-{平台}:
| 后缀 | 类型 | 体积 | 前提 |
|---|---|---|---|
-sc- |
自包含(Self-Contained) | ~100 MB | 无需安装任何运行时,开箱即用 |
-fd- |
依赖运行时(Framework-Dependent) | ~20 MB | 需安装 .NET 10 运行时 |
文件名示例:
A_Pair-sc-win-x64-unsigned.exe= 自包含版 · Windows 64位 · 无需装 .NET
| 文件 | 适用系统 |
|---|---|
A_Pair-*-win-x64-unsigned.exe |
Windows 10+ 64 位 |
A_Pair-*-linux-x64-unsigned |
Linux x64(Ubuntu 22.04+ / Debian 12+ 等) |
A_Pair-*-osx-x64-unsigned |
macOS Intel(x86_64) |
A_Pair-*-osx-arm64-unsigned |
macOS Apple Silicon(M1/M2/M3/M4) |
SHA256 校验
下载后请核对文件哈希值,确保文件未被篡改或损坏。
| 文件 | SHA256 |
|---|---|
A_Pair-fd-linux-x64-unsigned |
92fe493129f3fc77ab6996c9539a494aa4ff43beb6ffabf13e1bb722c4ae7f14 |
A_Pair-fd-osx-arm64-unsigned |
90a7e91459d7d4b506bd5d475201c54b8b791c92131a616b0a6f9c7a9bc84756 |
A_Pair-fd-osx-x64-unsigned |
d2193615f0fbdd757c12118ab5fc84fc714b5e1c3912f9ba3a6256a1d036740d |
A_Pair-fd-win-x64-unsigned.exe |
46ae3c23f6b515ce787f789d8c009fe85985d2211eedbf5ab8c2e25f1aba1941 |
A_Pair-sc-linux-x64-unsigned |
655063a3e4e039e16b23615ff4a12c1f43ed3449cb5cfa3458af1c529a745d42 |
A_Pair-sc-osx-arm64-unsigned |
5875077231668175fe9092915d0e3abc45c9aae17b006e5466a7c7ee18009001 |
A_Pair-sc-osx-x64-unsigned |
10eb062f68e6cf67cf13629f61ad85583281bdf050837462c12563573673e6a8 |
A_Pair-sc-win-x64-unsigned.exe |
6468dabd84362bb15baaace44afff00cce1c54ea05e6054a8dec045372848187 |
⚠️ 务必校对:若哈希值不匹配,请勿运行,重新下载后再次核对。
重要提示
程序未签名
当前版本尚未进行代码签名,运行时可能遇到以下情况:
- Windows:双击后 SmartScreen 弹出 "Windows 保护了你的电脑" 警告。点击「更多信息」→「仍要运行」即可。
- macOS:首次打开时提示 "无法验证开发者"。前往「系统设置 → 隐私与安全性」→ 点击「仍要打开」。
- Linux:下载后需手动赋予执行权限:
chmod +x A_Pair-sc-linux-x64-unsigned && ./A_Pair-sc-linux-x64-unsigned
后续版本计划申请代码签名证书以消除这些警告。
使用方式
- 将下载的单个可执行文件放入一个空文件夹
- 直接运行即可(程序会在同目录创建
AppData/存放配置和数据)
更新内容
新增
- 网格、环形、自由点三种教室布局的可视化编辑
- 固定座位、前排轮换、随机填充三条内置策略管道
- CSV / Excel / JSON 学生名单导入导出
- PDF / 图片座位表导出
- 快照管理与历史回滚
- 命令模式撤销/重做(拖拽交换座位)
- 中英文双语界面
- 页面可导航性管理(可通过 JSON 配置禁用页面)
已知限制
- 插件管理 UI 尚未完成(功能可用但界面简陋)
- 同桌策略默认隐藏(算法在复杂布局下不稳定)
- 程序未签名,首次运行需手动放行