Skip to content

Releases: Helio-RC/A_Pair

A_Pair v1.1.0 更多内置策略🎉

14 Jun 07:14
e0f2bb1

Choose a tag to compare

A_Pair v1.1.0 Release

概述

v1.1.0 是一次重大架构升级,重新设计了座位分配策略系统,新增插件多策略包支持,并进行了全面的代码质量提升。共 140 个文件变更,49 个提交。


🏗️ 策略管道重构

双轨制架构

策略系统从单一管道模型升级为独立策略 + 依赖策略双轨制:

  • 独立策略 (ISeatingStrategy) — 在外部管道中按 Priority 降序执行,负责通用填充逻辑
  • 依赖策略 (IDependentSeatingStrategy) — 在 RandomFill 的每次随机分配循环内评估,支持 Approve / Reject / Handled 三态响应

新增 3 个策略

策略 类型 功能
性别限制座位 依赖 座位级性别限制,不匹配时自动重定向到匹配空座
同桌不重复 依赖 基于历史快照防止过去同桌再次相邻
碎片整理 独立 后置处理,将后排无约束学生前移,减小座位分散度

DeskMate 同桌策略重写

从独立策略改为依赖策略,新增三级协调分配

  1. 层级 1 — 相邻空座充足 → 直接分配全部组员
  2. 层级 2 — 空座不足 → 腾挪相邻非固定占座者,释放座位
  3. 层级 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

🔄 升级指南

  1. 如有旧格式插件,需迁移到新的双层清单结构(参见 docs/adr/ADR-007.md
  2. 如自定义策略依赖 Priority 值,需反转:旧 Priority=10(先执行)→ 新 Priority=90(先执行)
  3. 所有 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

后续版本计划申请代码签名证书以消除这些警告。

使用方式

  1. 将下载的单个可执行文件放入一个空文件夹
  2. 直接运行即可(程序会在同目录创建 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🎉

07 Jun 16:32

Choose a tag to compare

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

后续版本计划申请代码签名证书以消除这些警告。

使用方式

  1. 将下载的单个可执行文件放入一个空文件夹
  2. 直接运行即可(程序会在同目录创建 AppData/ 存放配置和数据)

更新内容

新增

  • 网格、环形、自由点三种教室布局的可视化编辑
  • 固定座位、前排轮换、随机填充三条内置策略管道
  • CSV / Excel / JSON 学生名单导入导出
  • PDF / 图片座位表导出
  • 快照管理与历史回滚
  • 命令模式撤销/重做(拖拽交换座位)
  • 中英文双语界面
  • 页面可导航性管理(可通过 JSON 配置禁用页面)

已知限制

  • 插件管理 UI 尚未完成(功能可用但界面简陋)
  • 同桌策略默认隐藏(算法在复杂布局下不稳定)
  • 程序未签名,首次运行需手动放行